Railshot
AI deployment & operations platform
Desplegar en entornos en la nube y on-premises preparados una aplicación web creada en local, y luego operarla.
Una plataforma de IA de despliegue y operación que lleva una aplicación web creada en local a entornos en la nube u on-premises preparados y la mantiene en funcionamiento.
Railshot vocabulary
- intake
- checks
- repair
- publish
- rollout
- route
- probe
- source commit
- digest
- binding
- unknown
- resume
- observation
Intake: deploy_repository · deploy_local_project · OAUTH MCP · Idempotency-Key · IDEMPOTENCY_CONFLICT · 202 ACCEPTED · EXECUTOR_BUSY · CAPACITY_EXCEEDED · maxConcurrentDeployments · workflow_dispatch · TARGET ALLOWLIST · reconciliation_required · CI_DISPATCH_UNCONFIRMEDChecks: package.policy · package.spec · source.quality · image.build · image.runtime · image.scan · GATE_ORDER · verdict.json · release_eligible · GATE VERDICT · SECRET SCAN · --cap-drop=ALL · source_change_allowed · verify_imagesAI Repair: GATE VERDICT · FIXABLE · give_up · PROMPT INJECTION · FAILURE SIGNATURE · REPAIR_SCOPE · MAX_REPAIR_ATTEMPTS · claude-agent-sdk · openai-codex · fixer · lessons.md · source_change_allowed · SDK_OUTCOME_UNKNOWNPublish: release_eligible · GHCR · images.json · EXACT TESTED BUNDLE · GITHUB-HOSTED RELEASE · published · publication_unverified · MANIFEST INSPECT · REGISTRY_VISIBILITY · publish-journal · railshot-release · containerd-snapshotter · images.tar · handoff.jsonRollout: bridge.py · workload.json · CONFIG GIT · pushing · REMOTE READBACK · ARGO CD · Synced · Healthy · targetRevision · sync_requested · NO PRUNE, NO FORCE · NetworkPolicy · readinessProbe · observed_images · NEVER BLINDLY RETRYPublic Route: routing · SHARED ALB · aws_lb_listener_rule · aws_lb_target_group · aws_route53_record · NodePort · LISTENER OWNERSHIP · GCP_ROUTE_APPLY_TIMEOUT · GCP_CERTIFICATE_DNS_FAILED · WireGuardHealth Probe: public_probe · site_probe · railshot-health/1 · NO PROXY, NO REDIRECT · expected_json · HTTPS 200 · verified_at · public_http · health_path · readinessProbe · probe_successSource Commit: workflow_dispatch · targetRevision · Railshot-Request · Railshot-Target · source_commit · source_parent · force: false · source_digest · snapshot.json · GITHUB_SHA · PLATFORM_REF · harness_sha256 · SUBMITTED SOURCE CHANGED · source_preparedImage Digest: GHCR · images.json · MANIFEST INSPECT · source_digest · IMMUTABLE GHCR DIGEST · images_sha256 · observed_images · PULL BY DIGEST · imagePullSecrets · containerd-snapshotter · RESUME_PUBLICATION_CHANGED · verify_images · images.tarRun Binding: Idempotency-Key · published · Railshot-Request · Railshot-Target · handoff.json · producer_attempt · bundle_artifact_id · run_id · state.bindings · CI_BINDING_MISMATCH · DEPLOYMENT BINDING CONFLICT · config_sha256 · TARGET ALLOWLIST · registered_applicationUnknown Outcome: publication_unverified · pushing · GCP_ROUTE_APPLY_TIMEOUT · outcome_unknown · CD_RECONCILE_REQUIRED · reconciliation_required · CD_OUTCOME_UNKNOWN · SDK_OUTCOME_UNKNOWN · unknown_timeout · CI_DISPATCH_UNCONFIRMED · NEVER BLINDLY RETRY · after_reconcile · reconcile_remote · CI_DISPATCH_NOT_IDENTIFIED · READ-ONLY OBSERVEResume: publish-journal · source_parent · RESUME_PUBLICATION_CHANGED · --resume · state.sqlite3 · resumePrepared · findDeployment · recoverDispatch · source_prepared · CI_DISPATCH_NOT_IDENTIFIED · resume_count · SAME WORKFLOW RUN · INTERRUPTEDObservation: observationRetry · next_retry_at · consecutive_failures · no_data · stale · collection_failed · NOT A SUCCESS GATE · probe_success · PROMETHEUS · BLACKBOX EXPORTER · READ-ONLY OBSERVE
La pantalla web y un agente propio piden el despliegue mediante la misma API del producto.
El producto, desde una solicitud de despliegue aceptada, pasando por las comprobaciones de CI y la publicación de la imagen, hasta la configuración de Git y el despliegue con Argo CD en un destino registrado y la verificación HTTPS pública. El éxito solo se registra con una revisión aplicada y una comprobación pública; un resultado que no se puede conocer queda como unknown.
Un proyecto enviado desde la pantalla web, o desde un agente de IA propio conectado por MCP, pasa por la preparación de los archivos de despliegue, la reparación de fallos, la publicación de la imagen, el despliegue en el entorno y la verificación de la URL pública; tras el despliegue, la misma pantalla muestra el historial y los logs y gestiona actualizaciones, paradas, reanudaciones y eliminaciones. Un proyecto en equipo.
Periodo de desarrollo del concurso: September 28, 2026 to October 4, 2026
La pantalla web y el servidor MCP construidos durante el hackatón. El MCP remoto inicia sesión con OAuth para enviar; las carpetas locales se envían mediante el MCP local.
Enviar → aceptar
La pantalla web, el MCP remoto y el MCP local llaman a la misma API del producto, que registra una solicitud comprobada como queued y responde 202.
Usuario del navegadordatos: carpeta · ZIP · URL de GitHubpantalla web · historial · Insights
apps/dashboardLa fuente y un entorno registrado se eligen en la pantalla web.
pantalla web · historial · Insights
apps/dashboarddatos: misma API del producto · /api/v1validar · destino · aceptación 202apps/apiLa pantalla web llama a la API del producto desde el mismo origen.
Cliente MCPdatos: OAuth · deploy_repositoryOAuth MCP · deploy_repository
agent/remote-mcp.jsEl MCP remoto se conecta por OAuth y recibe como entrada un repositorio público de GitHub.
OAuth MCP · deploy_repository
agent/remote-mcp.jsdatos: misma API del productovalidar · destino · aceptación 202apps/apiEl servidor MCP remoto llama a la misma API de despliegue a través de su cliente de API interno.
railshot-local MCPdatos: subida de ZIP · deploy_local_projectvalidar · destino · aceptación 202
apps/apiEl MCP stdio en el equipo del usuario comprime una carpeta en ZIP y la sube. Su sesión no se comparte con la sesión OAuth remota.
validar · destino · aceptación 202
apps/apidatos: registrado como queued · 202estado de la operación · vinculación del runapi/product-store.jsSe comprueban la entrada, el destino registrado, la capacidad y la clave de idempotencia; la operación se registra como queued y se responde con 202. Un 202 significa aceptado, no desplegado.
estado de la operación · vinculación del run
api/product-store.jsdatos: orden de la colacola de despliegue · 3 a la vezapps/apiSe toman en orden de aceptación, dentro del límite de despliegues simultáneos (3 por defecto).
estado de la operación · vinculación del run
api/product-store.jsobservación: estado del despliegue · historialpantalla web · historial · Insightsapps/dashboardLa pantalla web y las herramientas MCP leen los mismos registros de operación. El último intento y el despliegue verificado actual se muestran por separado, y una tarea de IA terminada no es un despliegue exitoso.
Comprobaciones de CI → publicación de la imagen
El código de plataforma fijado comprueba el commit enviado, solo pasa a la IA los fallos reparables y solo publica las imágenes que vuelven a superar las mismas comprobaciones.
cola de despliegue · 3 a la vez
apps/apidatos: source commitcommit de origen · trailersapps/<tenant>/<app>La fuente enviada se convierte en un commit en el repositorio privado apps (con los trailers Railshot-Request y Railshot-Target), y la rama se actualiza sin force.
cola de despliegue · 3 a la vez
apps/apiejecutar · aplicar: workflow_dispatchbucle · comprobaciones base L0–L3railshot-deploy.ymlSolicita una ejecución con tenant, app, source_commit y target_id. Si se pierde la respuesta, no se reenvía; en su lugar se buscan las ejecuciones del mismo commit.
commit de origen · trailers
apps/<tenant>/<app>datos: commit enviadobucle · comprobaciones base L0–L3railshot-deploy.ymlSolo se hace checkout del commit enviado y del código de plataforma fijado (PLATFORM_REF).
reparación con SDK · solo fallos reparables
railshot-deploy.ymldatos: solicitud de reparación · condicionalAI SDK providerSolo se llama para clases de fallo reparables, y se detiene cuando el mismo fallo se repite o se alcanza el límite de intentos. El aprobado o el fallo lo deciden las comprobaciones, no el LLM.
versión · publicación en GHCR · vinculación
railshot-deploy.ymldatos: publicar las imágenes comprobadasGHCRTras verificar el bundle que superó las comprobaciones, las mismas imágenes se publican en GHCR. No se reconstruye nada.
vinculación de la ejecución de CI · observación
apps/apiobservación: lectura de ejecución · publicaciónrailshot-deploy.ymlUna publicación solo cuenta si su run id, commit de origen, destino y app coinciden con el registro aceptado.
vinculación de la ejecución de CI · observación
apps/apifallo · resultado desconocido: failed · publication_unverifiedestado de la operación · vinculación del runapi/product-store.jsUn fallo de CI o una publicación no verificada se registra con diagnósticos y no se pasa a la CD.
Aplicar → comprobación pública
Solo aplica mediante el Git de config y Argo CD cuando la publicación coincide con el destino registrado, y solo registra el éxito después de que la dirección HTTPS pública registrada pase la comprobación.
versión · publicación en GHCR · vinculación
railshot-deploy.ymldatos: images.json · spec · verdict · manifestcd.js · deployPublishedapps/apiLa CD lee los archivos del registro de publicación mediante un cargador de confianza. La CI por sí misma no crea recursos de clúster, URL ni éxito de despliegue.
cd.js · deployPublished
apps/apiejecutar · aplicar: aplicar · destino registradoconfig de confianza · destino registradogitops/bridge.pyEjecuta gitops/bridge.py con la config de confianza solo si la app y el tenant registrados coinciden con el registro de publicación.
commit · push · relectura remota
gitops/bridge.pydatos: workload commit · pushRepositorio Git de configSolo hace commit de workload.json en la ruta registrada de una rama dedicada, registra primero la intención de push, hace push y vuelve a leer la revisión remota. Un push incierto no se repite.
Repositorio Git de configdatos: revisioncomprobación de Application · AppProject
Argo CDLa revisión del repositorio de config a la que apunta la Application de Argo CD.
sync de Argo · observación
gitops/bridge.pyejecutar · aplicar: sync · observarcomprobación de Application · AppProjectArgo CDSolicita una sync tras comprobar el AppProject; al observar solo lee, sin sync.
comprobación de Application · AppProject
Argo CDejecutar · aplicar: aplicarworkload · ServiceClúster de aplicaciones K3sAplica el workload al clúster de destino registrado.
workload · Service
Clúster de aplicaciones K3sdatos: pull de la imagen · digestGHCRDescarga el digest publicado. Un GHCR privado necesita una credencial de pull dedicada.
sonda HTTPS pública
gitops/bridge.pyobservación: HTTPS healthURL HTTPS públicaSolo comprueba la dirección HTTPS de health registrada por el operador, sin redirecciones, esperando un 200 (y el JSON esperado si está definido).
URL HTTPS públicadatos: ruta públicaworkload · Service
Clúster de aplicaciones K3sLa ruta pública (LB, NodePort, certificado) varía según el proveedor y el destino registrado.
cd.js · deployPublished
apps/apidatos: succeeded · revision · URLestado de la operación · vinculación del runapi/product-store.jsSe registra como succeeded solo con cd.deployed, una revisión, una comprobación HTTPS pública exitosa, su hora y una URL válida.
cd.js · deployPublished
apps/apifallo · resultado desconocido: unknown · requiere conciliaciónestado de la operación · vinculación del runapi/product-store.jsUn resultado que no se puede conocer queda como unknown; la misma aplicación no se reenvía ni se revierte.
Observación · no es el veredicto
Las métricas y las sondas no deciden el éxito del despliegue. Los valores ausentes, obsoletos y fallidos se muestran tal cual.
metrics observer
apps/apiobservación: consulta PromQLPrometheusLee las series up, probe_success y de Pods. Los valores ausentes, obsoletos o fallidos se muestran en ese estado y nunca se convierten en 0.
Prometheusobservación: scrape · probeworkload · Service
Clúster de aplicaciones K3sScrape de exporters y sonda HTTP. Estas métricas no se usan para decidir el éxito del despliegue.
estado de la operación · vinculación del run
api/product-store.jsobservación: estado del despliegue · historialpantalla web · historial · Insightsapps/dashboardLa pantalla web y las herramientas MCP leen los mismos registros de operación. El último intento y el despliegue verificado actual se muestran por separado, y una tarea de IA terminada no es un despliegue exitoso.
sonda HTTPS pública
gitops/bridge.pyobservación: HTTPS healthURL HTTPS públicaSolo comprueba la dirección HTTPS de health registrada por el operador, sin redirecciones, esperando un 200 (y el JSON esperado si está definido).
Todas las conexiones con el mismo grosor. Elija un flujo para resaltar solo su recorrido, con pasos numerados.
- Continua · dirección en que fluyen fuentes, imágenes y solicitudes
- Discontinua · solicitud de ejecución, aplicación o sync
- Raya larga y punto · lecturas de estado, sondas y métricas, aparte del veredicto
- Guion corto · fallo registrado o resultado desconocido
- Línea negra gruesa · el flujo seleccionado; los números dan el orden
- Recuadro · frontera propietaria, con su ruta de origen en la cabecera
- Chip interior · componente de esa frontera
- Recuadro discontinuo · fuera de la plataforma
- Contorno naranja · donde decide un modelo
- API del producto
- Registros de despliegue
- Frontera de ejecución de CD
- Entrada · CI · destino
La imagen del October 2 (bc61a5a) en docs/architecture/README.md es historial de implementación; esta arquitectura sigue el código de 645e28a. Los proveedores y las rutas de red varían según el destino registrado, y esto no significa que todos los proveedores estén siempre activos.