## Una cuenta de Comal, varias maneras de entrar La cuenta de Comal identifica al propietario de tus workspaces y artifacts. Google, Apple, Facebook y GitHub son adaptadores de identidad: sólo aparecen disponibles cuando el administrador configura sus registros y credenciales. Tu identificador interno sigue siendo el mismo al vincular otro proveedor desde Ajustes. No se fusionan cuentas automáticamente por email. La cuenta de Comal es distinta de tus proveedores de modelos. `comal login codex` conecta inferencia con Codex; `comal cloud login` conecta tu cuenta de Comal para publicar artifacts. Ninguno sustituye al otro. ## Conecta la CLI ```sh node bin/comal.mjs cloud login node bin/comal.mjs cloud status ``` Abre la URL que muestra la terminal. Inicia sesión con un proveedor configurado, revisa el código y confirma sólo si tú iniciaste esa conexión. Tener una URL con un código no concede acceso: hay una confirmación explícita y la CLI debe probar que creó la solicitud. Comal guarda un token propio y revocable en un archivo privado. El token social y las credenciales del ejecutor de verificación no se entregan a la CLI ni al modelo. La conexión dura hasta 30 días, salvo revocación o expiración anterior. Para otra casa, fija su origen HTTPS: ```sh node bin/comal.mjs cloud login --cloud-url https://comal.example.org ``` El cliente no envía la credencial guardada a un origen diferente. `--cloud-url` no es `--base-url`: este último selecciona inferencia. ## Prepara una webapp estática Publica un directorio de salida limpio con HTML, CSS, JavaScript y assets locales. No incluye un backend de la aplicación. Los límites actuales son 256 archivos y 8 MiB decodificados por versión. Se excluyen entradas ocultas y se rechazan enlaces simbólicos y tipos de archivo no admitidos. Usa rutas relativas para tus assets. Cada versión se abre bajo su ruta inmutable; una referencia absoluta `/app.js` no apunta automáticamente a la versión. El perfil inicial permite scripts y almacenamiento local del navegador, pero bloquea conexiones externas, iframes, workers, formularios y APIs de dispositivo. No publiques una aplicación que dependa de un CDN o API externa bajo este perfil. Consulta `cloud status` para obtener tu workspace. Crea, por ejemplo, `artifact.json` fuera del directorio que vas a publicar. Sustituye el ID de ejemplo por el real: ```json { "workspace_id": "00000000000000000000000000000000", "session_id": "mi-sesion-cli", "title": "Calculadora de costos", "entrypoint": "index.html", "checks": [ { "id": "titulo_visible", "kind": "text", "selector": "h1", "equals": "Calculadora de costos" } ] } ``` ```sh node bin/comal.mjs artifacts publish ./dist --manifest ./artifact.json ``` En la CLI manual, `session_id` es una etiqueta de procedencia que tú proporcionas; no concede permisos ni prueba por sí sola la existencia de una sesión Node. En la herramienta nativa del modelo, el host proporciona la sesión real. El resultado es un **candidato privado**, con versión y contrato de verificación. Repetir los mismos bytes y metadata reconcilia el mismo intento. Para actualizar, conserva los checks y agrega `artifact_id` y `base_version` obtenidos de la inspección actual. El backend rechaza bases antiguas y cambios silenciosos al contrato. ## Comprueba antes de entregar ```sh node bin/comal.mjs artifacts inspect ARTIFACT_ID node bin/comal.mjs artifacts verify ARTIFACT_ID node bin/comal.mjs artifacts inspect ARTIFACT_ID ``` `verify` encola el contrato. Requiere un ejecutor de navegador del backend activo. Una solicitud encolada no significa que los checks pasaron. El ejecutor comprueba archivos, acceso autorizado/anónimo/ajeno y renderizado; además ejecuta los checks declarados. Guarda observaciones ligadas a esa versión y plan. Un check funcional fallido puede requerir corregir y publicar otro candidato. Si el resultado es `inconclusive`, falta evidencia o el ejecutor no pudo completar su trabajo: no presupongas que el código falló ni lo reescribas sin una observación que lo justifique. Recupera el ejecutor o solicita ayuda al operador y verifica de nuevo. Sólo cuando el job actual está `passed`, sin cambios de acceso o contenido que lo invaliden: ```sh node bin/comal.mjs artifacts release ARTIFACT_ID VERSION_ID JOB_ID ``` La entrega conserva su URL privada. La verificación técnica no certifica por sí sola que se cumplió todo el encargo humano: la aceptación humana permanece sin juzgar. ## Pídeselo al modelo Las herramientas se descubren de forma diferida mediante el plugin nativo `artifacts`. No cargan sus esquemas en cada solicitud. Puedes decir: > Publica la aplicación estática de `dist` como artifact de mi cuenta de Comal. Consulta mi workspace, declara una prueba del título y otra de la interacción principal. Verifica el candidato y corrige los fallos antes de entregar. Conserva los recibos y dame la URL privada. `ArtifactAccount`, `ArtifactList`, `ArtifactInspect`, `ArtifactPublish`, `ArtifactVerify` y `ArtifactRelease` atraviesan la casa. Publicar, verificar y entregar requieren la política de permisos vigente; descubrir una herramienta no concede autoridad. La procedencia de sesión de `ArtifactPublish` la proporciona el host, no un ID inventado por el modelo. El modelo no tiene una herramienta para emitir un resultado `passed` del ejecutor. ## Comparte y revoca Abre Mis artifacts en la web. El propietario puede conceder o revocar acceso de lectura usando el identificador interno de Comal de la otra persona, visible en sus Ajustes. Sólo los usuarios autorizados abren HTML y assets; revocar bloquea las nuevas lecturas, sin recuperar bytes que alguien ya hubiera descargado. Cada artifact vive en un origen aislado. El navegador recibe una cookie de vista limitada a ese artifact; la cookie maestra de Comal y los tokens sociales no se comparten con su JavaScript. Los candidatos pertenecen al propietario; los invitados ven la versión entregada. ## Cierra la conexión ```sh node bin/comal.mjs cloud logout ``` Revoca la sesión actual de la CLI y elimina su credencial local. No cierra tus otras sesiones del navegador ni tus logins de inferencia. Si el backend no responde, la credencial se conserva para que puedas reintentar su revocación. ## Comprueba que entendiste Publica una página con un título distinto del esperado en su check. Solicita verificación: la entrega debe rechazarse. Corrige el título, publica con la base actual y los mismos checks, verifica otra vez y entrega sólo esa versión. Una carga exitosa y una entrega verificada son estados diferentes.