Railshot
AI deployment & operations platform
将在本机构建的 Web 应用部署到预先准备的云端与本地机房环境,并加以运维。
一个 AI 部署与运维平台:把在本机构建的 Web 应用部署到预先准备的云端或本地机房环境,并持续运行。
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
Web 界面与自有智能体通过同一个产品 API 请求部署。
产品全程:从受理的部署请求出发,经 CI 检查与镜像发布,到已注册目标上的 Git 配置与 Argo CD 应用,以及公开 HTTPS 验证。只有同时具备已应用的 revision 和公开检查,才记录为成功;无法确知的结果保持为 unknown。
从 Web 界面,或从经 MCP 连接的自有 AI 智能体提交项目后,平台依次完成部署文件准备、失败修复、镜像发布、环境上线和公开 URL 验证;部署之后,同一界面显示历史与日志,并管理更新、停止、恢复和删除。团队项目。
赛事开发期 September 28, 2026 to October 4, 2026
黑客松期间构建的 Web 界面和 MCP 服务器。远程 MCP 通过 OAuth 登录后提交;本地文件夹经本地 MCP 提交。
提交 → 受理
Web 界面、远程 MCP 和本地 MCP 调用同一个产品 API,API 将检查过的请求记录为 queued 并以 202 应答。
浏览器用户数据: 文件夹 · ZIP · GitHub URLWeb 界面 · 历史 · Insights
apps/dashboard在 Web 界面上选择源码与已注册环境。
Web 界面 · 历史 · Insights
apps/dashboard数据: 同一产品 API · /api/v1校验 · 目标 · 202 受理apps/apiWeb 界面从同源调用产品 API。
MCP 客户端数据: OAuth · deploy_repositoryOAuth MCP · deploy_repository
agent/remote-mcp.js远程 MCP 通过 OAuth 连接,以公开 GitHub 仓库作为输入。
OAuth MCP · deploy_repository
agent/remote-mcp.js数据: 同一产品 API校验 · 目标 · 202 受理apps/api远程 MCP 服务器通过内部 API 客户端调用同一部署 API。
railshot-local MCP数据: ZIP 上传 · deploy_local_project校验 · 目标 · 202 受理
apps/api用户电脑上的 stdio MCP 将文件夹打包为 ZIP 并上传。其会话不与远程 OAuth 会话共享。
校验 · 目标 · 202 受理
apps/api数据: 记录为 queued · 202operation 状态 · run 绑定api/product-store.js检查输入、已注册目标、容量和幂等键后,将 operation 记录为 queued,并以 202 应答。202 表示已受理,而非已部署。
operation 状态 · run 绑定
api/product-store.js数据: 队列顺序部署队列 · 并发 3apps/api在并发部署上限(默认 3)内按受理顺序取出。
operation 状态 · run 绑定
api/product-store.js观测: 部署状态 · 历史Web 界面 · 历史 · Insightsapps/dashboardWeb 界面和 MCP 工具读取同一份 operation 记录。最近一次尝试与当前已验证的部署分开显示,AI 任务完成并不等于部署成功。
CI 检查 → 镜像发布
固定的平台代码检查提交的 commit,只把可修复的失败交给 AI,并只发布再次通过同样检查的镜像。
部署队列 · 并发 3
apps/api数据: source commit源提交 · trailerapps/<tenant>/<app>提交的源码在私有 apps 仓库中生成一个 commit(带 Railshot-Request 和 Railshot-Target trailer),分支以非 force 方式更新。
部署队列 · 并发 3
apps/api运行 · 应用: workflow_dispatch循环 · 基线检查 L0–L3railshot-deploy.yml以 tenant、app、source_commit 和 target_id 请求一次运行。若响应丢失,不会重新发送,而是查找同一 commit 的运行。
源提交 · trailer
apps/<tenant>/<app>数据: 提交的 commit循环 · 基线检查 L0–L3railshot-deploy.yml只检出提交的 commit 和固定的平台代码(PLATFORM_REF)。
SDK 修复 · 仅限可修复的失败
railshot-deploy.yml数据: 修复请求 · 有条件AI SDK provider仅在失败属于可修复类别时调用;同一失败重复出现或达到尝试上限时停止。通过与否由检查决定,而不是由 LLM 决定。
release · GHCR 发布 · 绑定
railshot-deploy.yml数据: 发布已检查的镜像GHCR核实通过检查的 bundle 后,将同样的镜像发布到 GHCR,不重新构建。
CI 运行绑定 · 观测
apps/api观测: 运行 · 发布记录读取railshot-deploy.yml只有 run id、源提交、目标和 app 与受理记录一致时,发布才被认可。
CI 运行绑定 · 观测
apps/api失败 · 结果未知: failed · publication_unverifiedoperation 状态 · run 绑定api/product-store.jsCI 失败或未经核实的发布连同诊断信息一起记录,不交给 CD。
应用 → 公开检查
仅当发布记录与已注册目标一致时,才通过 config Git 和 Argo CD 应用;只有在已注册的公开 HTTPS 地址检查通过后,才记录成功。
release · GHCR 发布 · 绑定
railshot-deploy.yml数据: images.json · spec · verdict · manifestcd.js · deployPublishedapps/apiCD 通过可信 loader 读取发布记录中的文件。CI 本身不创建集群资源或 URL,也不产生部署成功。
cd.js · deployPublished
apps/api运行 · 应用: 应用 · 已注册目标可信 config · 已注册目标gitops/bridge.py仅当已注册的 app 和 tenant 与发布记录一致时,才以可信 config 运行 gitops/bridge.py。
commit · push · 远程回读
gitops/bridge.py数据: workload commit · pushconfig Git 仓库只将 workload.json 提交到专用分支的注册路径,先记录 push 意图,再 push,并读回远程 revision。结果不确定的 push 不会重复。
config Git 仓库数据: revisionApplication · AppProject 检查
Argo CDArgo CD Application 指向的 config 仓库 revision。
Argo sync · 观测
gitops/bridge.py运行 · 应用: sync · 观测Application · AppProject 检查Argo CD检查 AppProject 后请求 sync;观测时只读取,不 sync。
Application · AppProject 检查
Argo CD运行 · 应用: 应用workload · ServiceK3s 应用集群将 workload 应用到已注册的目标集群。
workload · Service
K3s 应用集群数据: 镜像 pull · digestGHCR拉取已发布的 digest。私有 GHCR 需要专用的 pull 凭据。
公开 HTTPS 探针
gitops/bridge.py观测: HTTPS health公开 HTTPS URL只检查运维人员注册的 HTTPS health 地址,不跟随重定向,确认返回 200(如有设定,还需符合预期 JSON)。
公开 HTTPS URL数据: 公开路径workload · Service
K3s 应用集群公开路径(LB、NodePort、证书)因提供商和已注册目标而异。
cd.js · deployPublished
apps/api数据: succeeded · revision · URLoperation 状态 · run 绑定api/product-store.js只有同时具备 cd.deployed、revision、成功的公开 HTTPS 检查及其时间和有效 URL 时,才记录为 succeeded。
cd.js · deployPublished
apps/api失败 · 结果未知: unknown · 需重新核对operation 状态 · run 绑定api/product-store.js无法确知的结果保持为 unknown;同一应用操作既不重发,也不回滚。
观测 · 不作判定
指标与探针不决定部署是否成功。缺失、过期和采集失败的值按原样显示。
metrics observer
apps/api观测: PromQL 查询Prometheus读取 up、probe_success 和 Pod 序列。缺失、过期或采集失败的值按原状态显示,绝不转为 0。
Prometheus观测: scrape · probeworkload · Service
K3s 应用集群exporter 抓取与 HTTP 探针。这些指标不用于判定部署是否成功。
operation 状态 · run 绑定
api/product-store.js观测: 部署状态 · 历史Web 界面 · 历史 · Insightsapps/dashboardWeb 界面和 MCP 工具读取同一份 operation 记录。最近一次尝试与当前已验证的部署分开显示,AI 任务完成并不等于部署成功。
公开 HTTPS 探针
gitops/bridge.py观测: HTTPS health公开 HTTPS URL只检查运维人员注册的 HTTPS health 地址,不跟随重定向,确认返回 200(如有设定,还需符合预期 JSON)。
所有连接以相同粗细显示。选择一个流程,即只突出显示其路径,并标出步骤编号。
- 实线 · 源码、镜像与请求的流向
- 虚线 · 运行请求、应用或同步
- 长点划线 · 状态读取、探针与指标,独立于判定
- 短虚线 · 已记录的失败或未知结果
- 粗黑线 · 所选流程;数字表示顺序
- 方框 · 所属边界,标题栏注明源码路径
- 内层小框 · 该边界内的组件
- 虚线框 · 平台之外
- 橙色轮廓 · 模型作出判断之处
- 产品 API
- 部署记录
- CD 执行边界
- 入口 · CI · 目标
docs/architecture/README.md 中 10月2日(bc61a5a)的图是实现历史;本架构图依据 645e28a 的代码。提供商与网络路径因已注册目标而异,并不意味着所有提供商始终开启。