RAILSHOT.
Назад до зали

Railshot

AI deployment & operations platform

Розгорнути локально створений вебзастосунок у підготовлених хмарних і локальних середовищах, а потім підтримувати його роботу.

Платформа AI для розгортання й експлуатації, що переносить локально створений вебзастосунок у підготовлені хмарні чи локальні середовища й підтримує його роботу.

2026.09.28 – 2026.10.04 · завершено

Командний проєкт · моя роль: планування й реалізація CI, кластери CSP та інтерфейс Ansible, експлуатація, командне рев’ю коду й інтеграція

SoftBank Hackathon 2026 powered by KOREC & ProgateУчасник попереднього етапу · відбір до фіналу оголосять 2026.10.26 (станом на 2026.10.07)

  • ВебРеалізовано · хакатон
  • MCP-серверРеалізовано · віддалений · локальний

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

Вебекран і власний агент користувача запитують розгортання через той самий API продукту.

Продукт від прийнятого запиту на розгортання через перевірки CI й публікацію образу до конфігурації Git і розгортання Argo CD на зареєстрованій цілі та публічної перевірки HTTPS. Успіх записується лише за наявності і застосованої ревізії, і публічної перевірки; результат, який неможливо знати, лишається unknown.

Проєкт подається з вебекрана або з власного AI-агента, під’єднаного через MCP, і платформа проводить його через підготовку файлів розгортання, виправлення збоїв, публікацію образу, розгортання в середовищі та перевірку публічної URL-адреси; після розгортання той самий екран показує історію й журнали та керує оновленнями, зупинками, відновленнями й видаленням. Командний проєкт.

Період розробки в межах конкурсу: September 28, 2026 – October 4, 2026

Вебекран і MCP-сервер, створені під час хакатону. Віддалений MCP входить через OAuth для подання; локальні теки подаються через локальний MCP.

Архітектура продукту · накреслено за шляхами коду на публічному коміті 645e28a
Архітектура продукту RailshotКомпоненти й зв’язки продукту Railshot. Вебекран, віддалений OAuth MCP і локальний MCP на комп’ютері користувача запитують розгортання через той самий API продукту, який реєструє коміт джерела й запуск CI. CI вирішує фіксованими перевірками й публікує перевірені образи в GHCR. Адаптер CD застосовує зміни через config Git і Argo CD лише тоді, коли зареєстрована ціль збігається із записом публікації, а потім перевіряє зареєстровану публічну HTTPS-адресу й записує результат. Метрики — це спостереження, окреме від вердикту.Користувач браузератека · ZIP · URL GitHubКлієнт MCPChatGPT · Codex · Clauderailshot-local MCPкомп’ютер користувача · stdioGHCRобрази за дайджестомAI SDK providerCodex · Claude SDKРепозиторій config Gitзареєстрований workload.jsonПублічна HTTPS URL-адресазареєстрований шлях healthPrometheusкерівна VM експлуатації · читанняapps/dashboardвебекран · історія · Insightsagent/remote-mcp.jsOAuth MCP · deploy_repositoryapps/apiвалідація · ціль · прийняття 202черга розгортань · 3 одночасноприв’язка запуску CI · спостереженняcd.js · deployPublishedmetrics observerapi/product-store.jsстан операції · прив’язка rungitops/bridge.pyдовірена конфігурація · зареєстрована цількоміт · push · віддалене зчитуваннясинхронізація Argo · спостереженняпублічна HTTPS-пробаArgo CDApplication · перевірка AppProjectapps/<tenant>/<app>коміт джерела · трейлериrailshot-deploy.ymlцикл · базові перевірки L0–L3виправлення через SDK · лише виправні збоїті самі перевірки → перевірений bundleреліз · публікація в GHCR · прив’язкаКластер застосунків K3sworkload · ServiceПлатформа Railshotопераційний кластер · AWSGitHubприватний репозиторій apps · ActionsЗареєстрована цільпублічний шлях для кожного провайдера1 тека · ZIP · URL GitHub · Користувач браузера → вебекран · історія · Insights12той самий API продукту · /api/v13 OAuth · deploy_repository · Клієнт MCP → OAuth MCP · deploy_repository34той самий API продукту5 завантаження ZIP · deploy_local_project · railshot-local MCP → валідація · ціль · прийняття 20256 записано queued · 202 · валідація · ціль · прийняття 202 → стан операції · прив’язка run67 порядок черги · стан операції · прив’язка run → черга розгортань · 3 одночасно78стан розгортання · історія1source commit2workflow_dispatch3поданий коміт4запит на виправлення · за умовою5публікація перевірених образів6запуск · читання публікації7 failed · publication_unverified · прив’язка запуску CI · спостереження → стан операції · прив’язка run71images.json · spec · verdict · manifest2застосування · зареєстрована ціль3workload commit · push4revision5 синхронізація · спостереження · синхронізація Argo · спостереження → Application · перевірка AppProject56застосування7pull образу · дайджест8HTTPS health9 публічний шлях · Публічна HTTPS URL-адреса → workload · Service910 succeeded · revision · URL · cd.js · deployPublished → стан операції · прив’язка run1011 unknown · потрібна звірка · cd.js · deployPublished → стан операції · прив’язка run111запит PromQL2scrape · probe3стан розгортання · історія4HTTPS health

Подання → прийняття

Вебекран, віддалений MCP і локальний MCP викликають той самий API продукту, який записує перевірений запит як queued і відповідає 202.

  1. Користувач браузерадані: тека · ZIP · URL GitHubвебекран · історія · Insightsapps/dashboard

    Джерело й зареєстроване середовище обирають на вебекрані.

  2. вебекран · історія · Insightsapps/dashboardдані: той самий API продукту · /api/v1валідація · ціль · прийняття 202apps/api

    Вебекран викликає API продукту з того самого походження.

  3. Клієнт MCPдані: OAuth · deploy_repositoryOAuth MCP · deploy_repositoryagent/remote-mcp.js

    Віддалений MCP під’єднується через OAuth і приймає на вхід публічний репозиторій GitHub.

  4. OAuth MCP · deploy_repositoryagent/remote-mcp.jsдані: той самий API продуктувалідація · ціль · прийняття 202apps/api

    Віддалений MCP-сервер викликає той самий API розгортання через свого внутрішнього API-клієнта.

  5. railshot-local MCPдані: завантаження ZIP · deploy_local_projectвалідація · ціль · прийняття 202apps/api

    stdio MCP на комп’ютері користувача пакує теку в ZIP і завантажує її. Його сесія не спільна з віддаленою сесією OAuth.

  6. валідація · ціль · прийняття 202apps/apiдані: записано queued · 202стан операції · прив’язка runapi/product-store.js

    Перевіряються вхідні дані, зареєстрована ціль, ємність і ключ ідемпотентності; операцію записують як queued і відповідають 202. 202 означає «прийнято», а не «розгорнуто».

  7. стан операції · прив’язка runapi/product-store.jsдані: порядок чергичерга розгортань · 3 одночасноapps/api

    Беруться в порядку прийняття, у межах ліміту паралельних розгортань (типово 3).

  8. стан операції · прив’язка runapi/product-store.jsспостереження: стан розгортання · історіявебекран · історія · Insightsapps/dashboard

    Вебекран і інструменти MCP читають ті самі записи операцій. Остання спроба й поточне перевірене розгортання показуються окремо, а завершене завдання AI — це не успіх розгортання.

Перевірки CI → публікація образу

Зафіксований код платформи перевіряє поданий коміт, передає AI лише виправні збої й публікує лише образи, що знову пройшли ті самі перевірки.

  1. черга розгортань · 3 одночасноapps/apiдані: source commitкоміт джерела · трейлериapps/<tenant>/<app>

    Подане джерело стає комітом у приватному репозиторії apps (з трейлерами Railshot-Request і Railshot-Target), а гілка оновлюється без force.

  2. черга розгортань · 3 одночасноapps/apiзапуск · застосування: workflow_dispatchцикл · базові перевірки L0–L3railshot-deploy.yml

    Запитує запуск із tenant, app, source_commit і target_id. Якщо відповідь втрачено, запит не надсилається знову; натомість шукають запуски для того самого коміту.

  3. коміт джерела · трейлериapps/<tenant>/<app>дані: поданий комітцикл · базові перевірки L0–L3railshot-deploy.yml

    Виконується checkout лише поданого коміту й зафіксованого коду платформи (PLATFORM_REF).

  4. виправлення через SDK · лише виправні збоїrailshot-deploy.ymlдані: запит на виправлення · за умовоюAI SDK provider

    Викликається лише для класів виправних збоїв і зупиняється, коли той самий збій повторюється або досягнуто ліміту спроб. Успіх чи провал вирішують перевірки, а не LLM.

  5. реліз · публікація в GHCR · прив’язкаrailshot-deploy.ymlдані: публікація перевірених образівGHCR

    Після перевірки bundle, що пройшов перевірки, ті самі образи публікуються в GHCR. Нічого не перезбирається.

  6. прив’язка запуску CI · спостереженняapps/apiспостереження: запуск · читання публікаціїrailshot-deploy.yml

    Публікація зараховується, лише якщо її run id, коміт джерела, ціль і app збігаються з прийнятим записом.

  7. прив’язка запуску CI · спостереженняapps/apiзбій · невідомий результат: failed · publication_unverifiedстан операції · прив’язка runapi/product-store.js

    Збій CI або неперевірена публікація записуються з діагностикою й не передаються в CD.

Застосування → публічна перевірка

Застосовує зміни через config Git і Argo CD лише тоді, коли публікація збігається із зареєстрованою ціллю, і записує успіх лише після того, як зареєстрована публічна HTTPS-адреса пройде перевірку.

  1. реліз · публікація в GHCR · прив’язкаrailshot-deploy.ymlдані: images.json · spec · verdict · manifestcd.js · deployPublishedapps/api

    CD читає файли запису публікації через довірений завантажувач. Сам CI не створює ні ресурсів кластера, ні URL, ні успіху розгортання.

  2. cd.js · deployPublishedapps/apiзапуск · застосування: застосування · зареєстрована цільдовірена конфігурація · зареєстрована цільgitops/bridge.py

    Запускає gitops/bridge.py з довіреною конфігурацією лише тоді, коли зареєстровані app і tenant збігаються із записом публікації.

  3. коміт · push · віддалене зчитуванняgitops/bridge.pyдані: workload commit · pushРепозиторій config Git

    Комітить лише workload.json за зареєстрованим шляхом у виділеній гілці, спершу записує намір push, виконує push і зчитує віддалену ревізію. Невизначений push не повторюється.

  4. Репозиторій config Gitдані: revisionApplication · перевірка AppProjectArgo CD

    Ревізія конфігураційного репозиторію, на яку вказує Application в Argo CD.

  5. синхронізація Argo · спостереженняgitops/bridge.pyзапуск · застосування: синхронізація · спостереженняApplication · перевірка AppProjectArgo CD

    Запитує синхронізацію після перевірки AppProject; спостереження лише читає, без синхронізації.

  6. Application · перевірка AppProjectArgo CDзапуск · застосування: застосуванняworkload · ServiceКластер застосунків K3s

    Застосовує workload до зареєстрованого цільового кластера.

  7. workload · ServiceКластер застосунків K3sдані: pull образу · дайджестGHCR

    Завантажує опублікований дайджест. Для приватного GHCR потрібні окремі облікові дані для pull.

  8. публічна HTTPS-пробаgitops/bridge.pyспостереження: HTTPS healthПублічна HTTPS URL-адреса

    Перевіряє лише зареєстровану оператором HTTPS-адресу health, без переспрямувань, на 200 (і очікуваний JSON, якщо його задано).

  9. Публічна HTTPS URL-адресадані: публічний шляхworkload · ServiceКластер застосунків K3s

    Публічний шлях (LB, NodePort, сертифікат) відрізняється залежно від провайдера й зареєстрованої цілі.

  10. cd.js · deployPublishedapps/apiдані: succeeded · revision · URLстан операції · прив’язка runapi/product-store.js

    Записується як succeeded лише за наявності cd.deployed, ревізії, успішної публічної перевірки HTTPS, її часу й валідної URL-адреси.

  11. cd.js · deployPublishedapps/apiзбій · невідомий результат: unknown · потрібна звіркастан операції · прив’язка runapi/product-store.js

    Результат, який неможливо знати, лишається unknown; те саме застосування не надсилається повторно й не відкочується.

Спостереження · не вердикт

Метрики й проби не вирішують успіху розгортання. Відсутні, застарілі й невдалі значення показуються як є.

  1. metrics observerapps/apiспостереження: запит PromQLPrometheus

    Читає ряди up, probe_success і Pod. Відсутні, застарілі чи невдалі значення показуються в цьому стані й ніколи не перетворюються на 0.

  2. Prometheusспостереження: scrape · probeworkload · ServiceКластер застосунків K3s

    Збирання з exporter і HTTP-проба. Ці метрики не використовуються для рішення про успіх розгортання.

  3. стан операції · прив’язка runapi/product-store.jsспостереження: стан розгортання · історіявебекран · історія · Insightsapps/dashboard

    Вебекран і інструменти MCP читають ті самі записи операцій. Остання спроба й поточне перевірене розгортання показуються окремо, а завершене завдання AI — це не успіх розгортання.

  4. публічна HTTPS-пробаgitops/bridge.pyспостереження: HTTPS healthПублічна HTTPS URL-адреса

    Перевіряє лише зареєстровану оператором HTTPS-адресу health, без переспрямувань, на 200 (і очікуваний JSON, якщо його задано).

Усі зв’язки однакової товщини. Оберіть потік, щоб підсвітити лише його шлях із пронумерованими кроками.

  • Суцільна · напрямок, яким рухаються джерело, образи й запити
  • Штрихова · запит на запуск, застосування чи синхронізація
  • Довга штрихпунктирна · читання стану, проби й метрики, окремо від вердикту
  • Коротка штрихова · записаний збій або невідомий результат
  • Товста чорна лінія · обраний потік; номери показують порядок
  • Рамка · межа власності, шлях до джерела в заголовку
  • Внутрішня плашка · компонент усередині цієї межі
  • Штрихова рамка · поза платформою
  • Помаранчевий контур · де вирішує модель
  • API продукту
  • Записи розгортань
  • Межа виконання CD
  • Вхід · CI · ціль

Схема від October 2 (bc61a5a) у docs/architecture/README.md — історія реалізації; ця архітектура відповідає коду 645e28a. Провайдери й мережеві шляхи відрізняються залежно від зареєстрованої цілі, і це не означає, що кожен провайдер завжди ввімкнений.