Railshot
AI deployment & operations platform
將本機建置的網頁應用程式,部署到備妥的雲端與地端環境並維運。
把在本機建置的網頁應用程式部署到備妥的雲端或地端環境,並持續維運的 AI 部署與維運平台。
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
網頁畫面與自有代理透過同一個產品 API 請求部署。
從受理的部署請求,經 CI 檢查與映像檔發布,到已註冊目標上的 Git 組態與 Argo CD 套用,以及公開 HTTPS 驗證的產品架構。必須同時有已套用的修訂版本 與公開檢查才記為成功;無從得知的結果維持 unknown。
從網頁畫面,或從透過 MCP 連接的自有 AI 代理提交專案,即一路完成部署檔案準備、失敗修復、映像檔發布、環境套用與公開 URL 驗證;部署後也在同一畫面檢視歷程與日誌,並管理更新、停止、恢復與刪除。團隊專案。
大賽開發期間 September 28, 2026 to October 4, 2026
黑客松期間開發的網頁畫面與 MCP 伺服器。遠端 MCP 以 OAuth 登入後提交;本機資料夾透過本機 MCP 提交。
提交 → 受理
網頁畫面、遠端 MCP 與本機 MCP 呼叫同一個產品 API,API 將檢查過的請求記錄為 queued 並回應 202。
瀏覽器使用者資料: 資料夾 · ZIP · GitHub URL網頁畫面 · 歷程 · Insights
apps/dashboard在網頁畫面選擇原始碼與已註冊的環境。
網頁畫面 · 歷程 · Insights
apps/dashboard資料: 同一個產品 API · /api/v1驗證 · 目標 · 202 受理apps/api網頁畫面從同一來源呼叫產品 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資料: 佇列順序部署佇列 · 一次 3 個apps/api在並行部署上限(預設 3)內,依受理順序取出。
operation 狀態 · run 繫結
api/product-store.js觀測: 部署狀態 · 歷程網頁畫面 · 歷程 · Insightsapps/dashboard網頁畫面與 MCP 工具讀取相同的 operation 記錄。最近一次嘗試與目前已驗證的部署分開顯示;AI 任務完成不等於部署成功。
CI 檢查 → 映像檔發布
固定的平台程式碼檢查送出的提交,只把可修復的失敗交給 AI,並只發布再次通過相同檢查的映像檔。
部署佇列 · 一次 3 個
apps/api資料: source commit原始碼提交 · trailerapps/<tenant>/<app>提交的原始碼在私有 apps 儲存庫中成為一筆提交(附 Railshot-Request 與 Railshot-Target trailer),分支以不使用 force 的方式更新。
部署佇列 · 一次 3 個
apps/api執行 · 套用: workflow_dispatch迴圈 · 基本檢查 L0–L3railshot-deploy.yml以 tenant、app、source_commit 與 target_id 請求一次執行。回應遺失時不重新送出,而是搜尋同一提交的執行。
原始碼提交 · trailer
apps/<tenant>/<app>資料: 送出的提交迴圈 · 基本檢查 L0–L3railshot-deploy.yml只 checkout 送出的提交與固定的平台程式碼(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、source commit、target 與 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只有已註冊的應用程式與 tenant 與發布記錄一致時,才以受信任的 config 執行 gitops/bridge.py。
commit · push · 遠端回讀
gitops/bridge.py資料: workload commit · pushConfig Git 儲存庫只在專用分支的已註冊路徑提交 workload.json,先記錄 push 意圖,再 push 並讀回遠端修訂版本。不確定的 push 不重複執行。
Config Git 儲存庫資料: revisionApplication · AppProject 檢查
Argo CDArgo CD Application 所指向的 config 儲存庫修訂版本。
Argo sync · 觀測
gitops/bridge.py執行 · 套用: sync · 觀測Application · AppProject 檢查Argo CD檢查 AppProject 後請求 sync;觀測時只讀取,不進行 sync。
Application · AppProject 檢查
Argo CD執行 · 套用: 套用workload · ServiceK3s 應用程式叢集將 workload 套用到已註冊的目標叢集。
workload · Service
K3s 應用程式叢集資料: 映像檔 pull · 摘要值GHCR拉取已發布摘要值的映像檔。私有 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、修訂版本、成功的公開 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 scrape 與 HTTP 探針。這些指標不用於判定部署成功。
operation 狀態 · run 繫結
api/product-store.js觀測: 部署狀態 · 歷程網頁畫面 · 歷程 · Insightsapps/dashboard網頁畫面與 MCP 工具讀取相同的 operation 記錄。最近一次嘗試與目前已驗證的部署分開顯示;AI 任務完成不等於部署成功。
公開 HTTPS 探針
gitops/bridge.py觀測: HTTPS health公開 HTTPS URL只檢查維運人員註冊的 HTTPS health 位址,不跟隨重新導向,確認是否為 200(若有設定,也檢查預期的 JSON)。
所有連線以相同粗細顯示。選擇一個流程,即只突顯其路徑,並標出步驟編號。
- 實線 · 原始碼、映像檔與請求的流向
- 虛線 · 執行請求、套用或 sync
- 長點劃線 · 狀態讀取、探針與指標,與判定分開
- 短虛線 · 已記錄的失敗或未知結果
- 粗黑線 · 所選流程;數字表示順序
- 方框 · 擁有邊界,標題列為原始碼路徑
- 內層小框 · 該邊界內的元件
- 虛線框 · 平台之外
- 橘色外框 · 模型做出判斷之處
- 產品 API
- 部署記錄
- CD 執行邊界
- 入口 · CI · 目標
docs/architecture/README.md 中 10月2日(bc61a5a)的圖是實作歷史;此架構圖依循 645e28a 的程式碼。供應商與網路路徑依已註冊目標而不同,並不代表每個供應商都一直啟用。