Railshot
AI deployment & operations platform
Внедряване на локално създадено уеб приложение в подготвени облачни и локални среди и последваща експлоатация.
AI платформа за внедряване и експлоатация, която отвежда локално създадено уеб приложение в подготвени облачни или локални (on-premises) среди и го поддържа в работа.
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.
Проект, подаден от уеб интерфейса или от собствен AI агент, свързан чрез MCP, преминава през подготовката на файловете за внедряване, поправката на грешки, публикуването на образа, разгръщането в средата и проверката на публичния URL адрес; след внедряването същият екран показва историята и логовете и управлява обновяванията, спирането, възобновяването и изтриването. Екипен проект.
Период за разработка в състезанието: 28 септември 2026 г. – 4 октомври 2026 г.
Уеб интерфейсът и MCP сървърът, създадени по време на хакатона. Отдалеченият MCP влиза с OAuth, за да подава; локалните папки се подават чрез локалния MCP.
Подаване → приемане
Уеб интерфейсът, отдалеченият MCP и локалният MCP извикват един и същ продуктов API, който записва проверената заявка като queued и отговаря с 202.
Потребител в браузърданни: папка · ZIP · GitHub URLуеб интерфейс · история · Insights
apps/dashboardИзточникът и регистрирана среда се избират в уеб интерфейса.
уеб интерфейс · история · Insights
apps/dashboardданни: същият продуктов API · /api/v1валидиране · цел · приемане 202apps/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валидиране · цел · приемане 202apps/apiОтдалеченият MCP сървър извиква същия API за внедряване чрез вътрешния си API клиент.
railshot-local MCPданни: качване на ZIP · deploy_local_projectвалидиране · цел · приемане 202
apps/apiStdio MCP на компютъра на потребителя архивира папка в ZIP и я качва. Сесията му не се споделя с отдалечената OAuth сесия.
валидиране · цел · приемане 202
apps/apiданни: записано queued · 202състояние на операцията · обвързване с изпълнениеapi/product-store.jsПроверяват се входът, регистрираната цел, капацитетът и ключът за идемпотентност; операцията се записва като queued и се отговаря с 202. 202 означава прието, а не внедрено.
състояние на операцията · обвързване с изпълнение
api/product-store.jsданни: ред в опашкатаопашка за внедряване · по 3 едновременноapps/apiВзема се по реда на приемане, в рамките на лимита за едновременни внедрявания (по подразбиране 3).
състояние на операцията · обвързване с изпълнение
api/product-store.jsнаблюдение: състояние на внедряването · историяуеб интерфейс · история · Insightsapps/dashboardУеб интерфейсът и MCP инструментите четат едни и същи записи за операциите. Последният опит и текущото проверено внедряване се показват отделно, а завършена AI задача не е успешно внедряване.
Проверки в CI → публикуване на образа
Фиксираният код на платформата проверява подадения къмит, предава на AI само поправимите грешки и публикува само образите, преминали отново същите проверки.
опашка за внедряване · по 3 едновременно
apps/apiданни: source commitизходен къмит · trailersapps/<tenant>/<app>Подаденият изходен код става къмит в непубличното хранилище apps (с trailers Railshot-Request и Railshot-Target), а клонът се обновява без force.
опашка за внедряване · по 3 едновременно
apps/apiизпълнение · прилагане: workflow_dispatchцикъл · базови проверки L0–L3railshot-deploy.ymlИска изпълнение с tenant, app, source_commit и target_id. Ако отговорът се загуби, заявката не се изпраща отново; вместо това се търсят изпълненията за същия къмит.
изходен къмит · trailers
apps/<tenant>/<app>данни: подаден къмитцикъл · базови проверки L0–L3railshot-deploy.ymlПрави се checkout само на подадения къмит и на фиксирания код на платформата (PLATFORM_REF).
поправка чрез SDK · само поправими грешки
railshot-deploy.ymlданни: заявка за поправка · условнаAI SDK providerИзвиква се само за поправими класове грешки и спира, когато същата грешка се повтори или се достигне лимитът на опитите. Успехът или неуспехът се решават от проверките, а не от LLM.
версия · публикуване в GHCR · обвързване
railshot-deploy.ymlданни: публикуване на проверените образиGHCRСлед проверка на пакета, преминал проверките, същите образи се публикуват в GHCR. Нищо не се изгражда отново.
обвързване с изпълнение на CI · наблюдение
apps/apiнаблюдение: изпълнение · четене на публикуванетоrailshot-deploy.ymlПубликуването се зачита само когато run id, source commit, целта и приложението съвпадат с приетия запис.
обвързване с изпълнение на CI · наблюдение
apps/apiгрешка · неизвестен изход: failed · publication_unverifiedсъстояние на операцията · обвързване с изпълнениеapi/product-store.jsГрешка в CI или непотвърдено публикуване се записват с диагностика и не се предават на CD.
Прилагане → публична проверка
Прилага чрез config Git и Argo CD само когато публикуването съвпада с регистрираната цел, и записва успех само след като регистрираният публичен HTTPS адрес бъде потвърден.
версия · публикуване в GHCR · обвързване
railshot-deploy.ymlданни: images.json · spec · verdict · manifestcd.js · deployPublishedapps/apiCD чете файловете от записа за публикуване чрез доверен зареждач. Самият CI не създава ресурс в клъстера, URL адрес или успешно внедряване.
cd.js · deployPublished
apps/apiизпълнение · прилагане: прилагане · регистрирана целдоверена конфигурация · регистрирана целgitops/bridge.pyИзпълнява gitops/bridge.py с доверената конфигурация само когато регистрираните приложение и tenant съвпадат със записа за публикуване.
commit · push · отдалечено прочитане
gitops/bridge.pyданни: workload commit · pushХранилище config GitПрави къмит само на workload.json в регистрирания път на отделен клон, първо записва намерението за push, след това прави push и прочита обратно отдалечената ревизия. Несигурен push не се повтаря.
Хранилище config Gitданни: revisionApplication · проверка на AppProject
Argo CDРевизията на хранилището с конфигурация, към която сочи Application в Argo CD.
синхронизиране с Argo · наблюдение
gitops/bridge.pyизпълнение · прилагане: синхронизиране · наблюдениеApplication · проверка на AppProjectArgo CDИска синхронизиране след проверка на AppProject; при наблюдение само чете, без синхронизиране.
Application · проверка на AppProject
Argo CDизпълнение · прилагане: прилаганеworkload · ServiceK3s клъстер за приложенияПрилага работното натоварване към регистрирания целеви клъстер.
workload · Service
K3s клъстер за приложенияданни: изтегляне на образа · digestGHCRИзтегля публикувания digest. Непубличен GHCR изисква отделни идентификационни данни за изтегляне.
публична 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 · URLсъстояние на операцията · обвързване с изпълнениеapi/product-store.jsЗаписва се като succeeded само при cd.deployed, ревизия, успешна публична HTTPS проверка, времето ѝ и валиден URL.
cd.js · deployPublished
apps/apiгрешка · неизвестен изход: unknown · нужно е съгласуванесъстояние на операцията · обвързване с изпълнениеapi/product-store.jsРезултат, който не може да бъде узнат, остава unknown; същото прилагане нито се изпраща отново, нито се връща назад.
Наблюдение · не вердикт
Метриките и пробите не решават дали внедряването е успешно. Липсващите, остарелите и неуспешните стойности се показват такива, каквито са.
metrics observer
apps/apiнаблюдение: PromQL заявкаPrometheusЧете сериите up, probe_success и Pod. Липсващи, остарели или неуспешни стойности се показват в това състояние и никога не се превръщат в 0.
Prometheusнаблюдение: scrape · probeworkload · Service
K3s клъстер за приложенияScrape от exporter и HTTP проба. Тези метрики не се използват за решение за успешно внедряване.
състояние на операцията · обвързване с изпълнение
api/product-store.jsнаблюдение: състояние на внедряването · историяуеб интерфейс · история · Insightsapps/dashboardУеб интерфейсът и MCP инструментите четат едни и същи записи за операциите. Последният опит и текущото проверено внедряване се показват отделно, а завършена AI задача не е успешно внедряване.
публична HTTPS проба
gitops/bridge.pyнаблюдение: HTTPS healthПубличен HTTPS URLПроверява само регистрирания от оператора HTTPS health адрес, без пренасочвания, за отговор 200 (и очаквания JSON, ако е зададен).
Всички връзки с еднаква дебелина. Изберете поток, за да се откроят само неговият път и номерираните стъпки.
- Плътна · посоката, в която текат изходният код, образите и заявките
- Прекъсната · заявка за изпълнение, прилагане или синхронизиране
- Дълга щрих-пунктирна · четене на състояние, проби и метрики, отделно от вердикта
- Къса прекъсната · записана грешка или неизвестен изход
- Дебела черна линия · избраният поток; числата показват реда
- Кутия · граница със собственик, с пътя до изходния код в заглавието
- Вътрешен етикет · компонент в тази граница
- Прекъсната кутия · извън платформата
- Оранжев контур · където решава модел
- Продуктов API
- Записи за внедряванията
- Граница на изпълнението на CD
- Вход · CI · цел
Картината от 2 октомври (bc61a5a) в docs/architecture/README.md е история на реализацията; тази архитектура следва кода при 645e28a. Доставчиците и мрежовите пътища се различават според регистрираната цел, а това не означава, че всеки доставчик е винаги включен.