RAILSHOT.
Volver a la sala

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.

2026.09.28 — 2026.10.04 · Finalizado

Proyecto en equipo · mi parte: planificación e implementación de la CI, clústeres CSP e interfaz de Ansible, operación, revisión de código del equipo e integración

SoftBank Hackathon 2026 powered by KOREC & ProgateParticipante en la fase preliminar · selección para la final que se anunciará el 2026.10.26 (a fecha de 2026.10.07)

  • WebImplementado · hackatón
  • Servidor MCPImplementado · remoto · local

Railshot vocabulary

Lens
Deployment
Delivery
Endpoint Verification
Evidence
Artifact Identity
Reconciliation
  1. intake
  2. checks
  3. repair
  4. publish
  5. rollout
  1. route
  2. probe
  1. source commit
  2. digest
  3. binding
  1. unknown
  2. resume
  3. 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.

Arquitectura del producto · trazada a partir de las rutas de código en el commit público 645e28a
Arquitectura del producto RailshotComponentes y conexiones del producto Railshot. La pantalla web, el MCP OAuth remoto y un MCP local en el equipo del usuario piden el despliegue mediante la misma API del producto, que registra un commit de origen y una ejecución de CI. La CI decide con comprobaciones fijas y publica en GHCR las imágenes comprobadas. El adaptador de CD solo aplica mediante el Git de config y Argo CD cuando el destino registrado coincide con el registro de publicación, y luego comprueba la dirección HTTPS pública registrada y registra el resultado. Las métricas son observación, aparte del veredicto.Usuario del navegadorcarpeta · ZIP · URL de GitHubCliente MCPChatGPT · Codex · Clauderailshot-local MCPequipo del usuario · stdioGHCRimágenes por digestAI SDK providerCodex · Claude SDKRepositorio Git de configworkload.json registradoURL HTTPS públicaruta de health registradaPrometheusVM de control de operaciones · lecturaapps/dashboardpantalla web · historial · Insightsagent/remote-mcp.jsOAuth MCP · deploy_repositoryapps/apivalidar · destino · aceptación 202cola de despliegue · 3 a la vezvinculación de la ejecución de CI · observacióncd.js · deployPublishedmetrics observerapi/product-store.jsestado de la operación · vinculación del rungitops/bridge.pyconfig de confianza · destino registradocommit · push · relectura remotasync de Argo · observaciónsonda HTTPS públicaArgo CDcomprobación de Application · AppProjectapps/<tenant>/<app>commit de origen · trailersrailshot-deploy.ymlbucle · comprobaciones base L0–L3reparación con SDK · solo fallos reparablesmismas comprobaciones → bundle probadoversión · publicación en GHCR · vinculaciónClúster de aplicaciones K3sworkload · ServicePlataforma Railshotclúster de operaciones · AWSGitHubrepositorio apps privado · ActionsDestino registradoruta pública por proveedor1 carpeta · ZIP · URL de GitHub · Usuario del navegador → pantalla web · historial · Insights12misma API del producto · /api/v13 OAuth · deploy_repository · Cliente MCP → OAuth MCP · deploy_repository34misma API del producto5 subida de ZIP · deploy_local_project · railshot-local MCP → validar · destino · aceptación 20256 registrado como queued · 202 · validar · destino · aceptación 202 → estado de la operación · vinculación del run67 orden de la cola · estado de la operación · vinculación del run → cola de despliegue · 3 a la vez78estado del despliegue · historial1source commit2workflow_dispatch3commit enviado4solicitud de reparación · condicional5publicar las imágenes comprobadas6lectura de ejecución · publicación7 failed · publication_unverified · vinculación de la ejecución de CI · observación → estado de la operación · vinculación del run71images.json · spec · verdict · manifest2aplicar · destino registrado3workload commit · push4revision5sync · observar6aplicar7pull de la imagen · digest8HTTPS health9 ruta pública · URL HTTPS pública → workload · Service910 succeeded · revision · URL · cd.js · deployPublished → estado de la operación · vinculación del run1011 unknown · requiere conciliación · cd.js · deployPublished → estado de la operación · vinculación del run111consulta PromQL2scrape · probe3estado del despliegue · historial4HTTPS health

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.

  1. Usuario del navegadordatos: carpeta · ZIP · URL de GitHubpantalla web · historial · Insightsapps/dashboard

    La fuente y un entorno registrado se eligen en la pantalla web.

  2. pantalla web · historial · Insightsapps/dashboarddatos: misma API del producto · /api/v1validar · destino · aceptación 202apps/api

    La pantalla web llama a la API del producto desde el mismo origen.

  3. Cliente MCPdatos: OAuth · deploy_repositoryOAuth MCP · deploy_repositoryagent/remote-mcp.js

    El MCP remoto se conecta por OAuth y recibe como entrada un repositorio público de GitHub.

  4. OAuth MCP · deploy_repositoryagent/remote-mcp.jsdatos: misma API del productovalidar · destino · aceptación 202apps/api

    El servidor MCP remoto llama a la misma API de despliegue a través de su cliente de API interno.

  5. railshot-local MCPdatos: subida de ZIP · deploy_local_projectvalidar · destino · aceptación 202apps/api

    El 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.

  6. validar · destino · aceptación 202apps/apidatos: registrado como queued · 202estado de la operación · vinculación del runapi/product-store.js

    Se 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.

  7. estado de la operación · vinculación del runapi/product-store.jsdatos: orden de la colacola de despliegue · 3 a la vezapps/api

    Se toman en orden de aceptación, dentro del límite de despliegues simultáneos (3 por defecto).

  8. estado de la operación · vinculación del runapi/product-store.jsobservación: estado del despliegue · historialpantalla web · historial · Insightsapps/dashboard

    La 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.

  1. cola de despliegue · 3 a la vezapps/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.

  2. cola de despliegue · 3 a la vezapps/apiejecutar · aplicar: workflow_dispatchbucle · comprobaciones base L0–L3railshot-deploy.yml

    Solicita 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.

  3. commit de origen · trailersapps/<tenant>/<app>datos: commit enviadobucle · comprobaciones base L0–L3railshot-deploy.yml

    Solo se hace checkout del commit enviado y del código de plataforma fijado (PLATFORM_REF).

  4. reparación con SDK · solo fallos reparablesrailshot-deploy.ymldatos: solicitud de reparación · condicionalAI SDK provider

    Solo 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.

  5. versión · publicación en GHCR · vinculaciónrailshot-deploy.ymldatos: publicar las imágenes comprobadasGHCR

    Tras verificar el bundle que superó las comprobaciones, las mismas imágenes se publican en GHCR. No se reconstruye nada.

  6. vinculación de la ejecución de CI · observaciónapps/apiobservación: lectura de ejecución · publicaciónrailshot-deploy.yml

    Una publicación solo cuenta si su run id, commit de origen, destino y app coinciden con el registro aceptado.

  7. vinculación de la ejecución de CI · observaciónapps/apifallo · resultado desconocido: failed · publication_unverifiedestado de la operación · vinculación del runapi/product-store.js

    Un 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.

  1. versión · publicación en GHCR · vinculaciónrailshot-deploy.ymldatos: images.json · spec · verdict · manifestcd.js · deployPublishedapps/api

    La 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.

  2. cd.js · deployPublishedapps/apiejecutar · aplicar: aplicar · destino registradoconfig de confianza · destino registradogitops/bridge.py

    Ejecuta gitops/bridge.py con la config de confianza solo si la app y el tenant registrados coinciden con el registro de publicación.

  3. commit · push · relectura remotagitops/bridge.pydatos: workload commit · pushRepositorio Git de config

    Solo 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.

  4. Repositorio Git de configdatos: revisioncomprobación de Application · AppProjectArgo CD

    La revisión del repositorio de config a la que apunta la Application de Argo CD.

  5. sync de Argo · observacióngitops/bridge.pyejecutar · aplicar: sync · observarcomprobación de Application · AppProjectArgo CD

    Solicita una sync tras comprobar el AppProject; al observar solo lee, sin sync.

  6. comprobación de Application · AppProjectArgo CDejecutar · aplicar: aplicarworkload · ServiceClúster de aplicaciones K3s

    Aplica el workload al clúster de destino registrado.

  7. workload · ServiceClúster de aplicaciones K3sdatos: pull de la imagen · digestGHCR

    Descarga el digest publicado. Un GHCR privado necesita una credencial de pull dedicada.

  8. sonda HTTPS públicagitops/bridge.pyobservación: HTTPS healthURL HTTPS pública

    Solo comprueba la dirección HTTPS de health registrada por el operador, sin redirecciones, esperando un 200 (y el JSON esperado si está definido).

  9. URL HTTPS públicadatos: ruta públicaworkload · ServiceClúster de aplicaciones K3s

    La ruta pública (LB, NodePort, certificado) varía según el proveedor y el destino registrado.

  10. cd.js · deployPublishedapps/apidatos: succeeded · revision · URLestado de la operación · vinculación del runapi/product-store.js

    Se registra como succeeded solo con cd.deployed, una revisión, una comprobación HTTPS pública exitosa, su hora y una URL válida.

  11. cd.js · deployPublishedapps/apifallo · resultado desconocido: unknown · requiere conciliaciónestado de la operación · vinculación del runapi/product-store.js

    Un 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.

  1. metrics observerapps/apiobservación: consulta PromQLPrometheus

    Lee 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.

  2. Prometheusobservación: scrape · probeworkload · ServiceClúster de aplicaciones K3s

    Scrape de exporters y sonda HTTP. Estas métricas no se usan para decidir el éxito del despliegue.

  3. estado de la operación · vinculación del runapi/product-store.jsobservación: estado del despliegue · historialpantalla web · historial · Insightsapps/dashboard

    La 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.

  4. sonda HTTPS públicagitops/bridge.pyobservación: HTTPS healthURL HTTPS pública

    Solo 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.