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.
Проєкт подається з вебекрана або з власного AI-агента, під’єднаного через MCP, і платформа проводить його через підготовку файлів розгортання, виправлення збоїв, публікацію образу, розгортання в середовищі та перевірку публічної URL-адреси; після розгортання той самий екран показує історію й журнали та керує оновленнями, зупинками, відновленнями й видаленням. Командний проєкт.
Період розробки в межах конкурсу: September 28, 2026 – October 4, 2026
Вебекран і MCP-сервер, створені під час хакатону. Віддалений MCP входить через OAuth для подання; локальні теки подаються через локальний MCP.
Подання → прийняття
Вебекран, віддалений MCP і локальний MCP викликають той самий API продукту, який записує перевірений запит як queued і відповідає 202.
Користувач браузерадані: тека · ZIP · URL GitHubвебекран · історія · 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стан операції · прив’язка runapi/product-store.jsПеревіряються вхідні дані, зареєстрована ціль, ємність і ключ ідемпотентності; операцію записують як queued і відповідають 202. 202 означає «прийнято», а не «розгорнуто».
стан операції · прив’язка run
api/product-store.jsдані: порядок чергичерга розгортань · 3 одночасноapps/apiБеруться в порядку прийняття, у межах ліміту паралельних розгортань (типово 3).
стан операції · прив’язка run
api/product-store.jsспостереження: стан розгортання · історіявебекран · історія · Insightsapps/dashboardВебекран і інструменти MCP читають ті самі записи операцій. Остання спроба й поточне перевірене розгортання показуються окремо, а завершене завдання AI — це не успіх розгортання.
Перевірки CI → публікація образу
Зафіксований код платформи перевіряє поданий коміт, передає AI лише виправні збої й публікує лише образи, що знову пройшли ті самі перевірки.
черга розгортань · 3 одночасно
apps/apiдані: source commitкоміт джерела · трейлериapps/<tenant>/<app>Подане джерело стає комітом у приватному репозиторії apps (з трейлерами Railshot-Request і Railshot-Target), а гілка оновлюється без force.
черга розгортань · 3 одночасно
apps/apiзапуск · застосування: workflow_dispatchцикл · базові перевірки L0–L3railshot-deploy.ymlЗапитує запуск із tenant, app, source_commit і target_id. Якщо відповідь втрачено, запит не надсилається знову; натомість шукають запуски для того самого коміту.
коміт джерела · трейлери
apps/<tenant>/<app>дані: поданий комітцикл · базові перевірки L0–L3railshot-deploy.ymlВиконується checkout лише поданого коміту й зафіксованого коду платформи (PLATFORM_REF).
виправлення через SDK · лише виправні збої
railshot-deploy.ymlдані: запит на виправлення · за умовоюAI SDK providerВикликається лише для класів виправних збоїв і зупиняється, коли той самий збій повторюється або досягнуто ліміту спроб. Успіх чи провал вирішують перевірки, а не LLM.
реліз · публікація в GHCR · прив’язка
railshot-deploy.ymlдані: публікація перевірених образівGHCRПісля перевірки bundle, що пройшов перевірки, ті самі образи публікуються в GHCR. Нічого не перезбирається.
прив’язка запуску CI · спостереження
apps/apiспостереження: запуск · читання публікаціїrailshot-deploy.ymlПублікація зараховується, лише якщо її run id, коміт джерела, ціль і app збігаються з прийнятим записом.
прив’язка запуску CI · спостереження
apps/apiзбій · невідомий результат: failed · publication_unverifiedстан операції · прив’язка runapi/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 з довіреною конфігурацією лише тоді, коли зареєстровані app і tenant збігаються із записом публікації.
коміт · 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 · ServiceКластер застосунків K3sЗастосовує 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 · URLстан операції · прив’язка runapi/product-store.jsЗаписується як succeeded лише за наявності cd.deployed, ревізії, успішної публічної перевірки HTTPS, її часу й валідної URL-адреси.
cd.js · deployPublished
apps/apiзбій · невідомий результат: unknown · потрібна звіркастан операції · прив’язка runapi/product-store.jsРезультат, який неможливо знати, лишається unknown; те саме застосування не надсилається повторно й не відкочується.
Спостереження · не вердикт
Метрики й проби не вирішують успіху розгортання. Відсутні, застарілі й невдалі значення показуються як є.
metrics observer
apps/apiспостереження: запит PromQLPrometheusЧитає ряди up, probe_success і Pod. Відсутні, застарілі чи невдалі значення показуються в цьому стані й ніколи не перетворюються на 0.
Prometheusспостереження: scrape · probeworkload · Service
Кластер застосунків K3sЗбирання з exporter і HTTP-проба. Ці метрики не використовуються для рішення про успіх розгортання.
стан операції · прив’язка run
api/product-store.jsспостереження: стан розгортання · історіявебекран · історія · Insightsapps/dashboardВебекран і інструменти MCP читають ті самі записи операцій. Остання спроба й поточне перевірене розгортання показуються окремо, а завершене завдання AI — це не успіх розгортання.
публічна HTTPS-проба
gitops/bridge.pyспостереження: HTTPS healthПублічна HTTPS URL-адресаПеревіряє лише зареєстровану оператором HTTPS-адресу health, без переспрямувань, на 200 (і очікуваний JSON, якщо його задано).
Усі зв’язки однакової товщини. Оберіть потік, щоб підсвітити лише його шлях із пронумерованими кроками.
- Суцільна · напрямок, яким рухаються джерело, образи й запити
- Штрихова · запит на запуск, застосування чи синхронізація
- Довга штрихпунктирна · читання стану, проби й метрики, окремо від вердикту
- Коротка штрихова · записаний збій або невідомий результат
- Товста чорна лінія · обраний потік; номери показують порядок
- Рамка · межа власності, шлях до джерела в заголовку
- Внутрішня плашка · компонент усередині цієї межі
- Штрихова рамка · поза платформою
- Помаранчевий контур · де вирішує модель
- API продукту
- Записи розгортань
- Межа виконання CD
- Вхід · CI · ціль
Схема від October 2 (bc61a5a) у docs/architecture/README.md — історія реалізації; ця архітектура відповідає коду 645e28a. Провайдери й мережеві шляхи відрізняються залежно від зареєстрованої цілі, і це не означає, що кожен провайдер завжди ввімкнений.