RAILSHOT.
Powrót do sali

Railshot

AI deployment & operations platform

Wdrożenie lokalnie zbudowanej aplikacji webowej w przygotowanych środowiskach chmurowych i lokalnych, a potem jej utrzymanie.

Platforma AI do wdrażania i utrzymania, która przenosi lokalnie zbudowaną aplikację webową do przygotowanych środowisk chmurowych lub lokalnych (on-premises) i dalej ją utrzymuje.

2026.09.28 — 2026.10.04 · Zakończony

Projekt zespołowy · mój udział: planowanie i implementacja CI, klastry CSP i interfejs Ansible, utrzymanie, przegląd kodu zespołu i integracja

SoftBank Hackathon 2026 powered by KOREC & ProgateUczestnik eliminacji · wybór finalistów zostanie ogłoszony 2026.10.26 (stan na 2026.10.07)

  • Wersja webowaZaimplementowane · hackathon
  • Serwer MCPZaimplementowane · zdalnie · lokalnie

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

Ekran webowy i własny agent zlecają wdrożenie przez to samo API produktu.

Produkt od przyjętego żądania wdrożenia, przez kontrole CI i publikację obrazu, po konfigurację Git i wdrożenie Argo CD na zarejestrowanym celu oraz weryfikację publicznego HTTPS. Sukces jest zapisywany tylko przy zastosowanej rewizji i publicznej kontroli; wynik, którego nie da się poznać, pozostaje unknown.

Projekt zgłoszony z ekranu webowego albo z własnego agenta AI podłączonego przez MCP przechodzi przez przygotowanie plików wdrożeniowych, naprawę błędów, publikację obrazu, wdrożenie w środowisku i weryfikację publicznego adresu URL; po wdrożeniu ten sam ekran pokazuje historię i logi oraz pozwala zarządzać aktualizacjami, zatrzymaniem, wznowieniem i usunięciem. Projekt zespołowy.

Okres prac konkursowych September 28, 2026 to October 4, 2026

Ekran webowy i serwer MCP zbudowane podczas hackathonu. Zdalny MCP loguje się przez OAuth, aby zgłosić projekt; lokalne foldery zgłasza się przez lokalny MCP.

Architektura produktu · narysowana na podstawie ścieżek kodu w publicznym commicie 645e28a
Architektura produktu RailshotKomponenty i połączenia produktu Railshot. Ekran webowy, zdalny MCP z OAuth i lokalny MCP na komputerze użytkownika zlecają wdrożenie przez to samo API produktu, które rejestruje commit źródłowy i przebieg CI. CI rozstrzyga na podstawie stałych kontroli i publikuje sprawdzone obrazy w GHCR. Adapter CD stosuje zmiany przez config Git i Argo CD tylko wtedy, gdy zarejestrowany cel zgadza się z zapisem publikacji, a następnie sprawdza zarejestrowany publiczny adres HTTPS i zapisuje wynik. Metryki są obserwacją, oddzielną od werdyktu.Użytkownik przeglądarkifolder · ZIP · URL GitHubKlient MCPChatGPT · Codex · Clauderailshot-local MCPkomputer użytkownika · stdioGHCRobrazy według digestAI SDK providerCodex · Claude SDKRepozytorium Git konfiguracjizarejestrowany workload.jsonPubliczny adres HTTPSzarejestrowana ścieżka healthPrometheusoperacyjna VM sterująca · odczytapps/dashboardekran webowy · historia · Insightsagent/remote-mcp.jsOAuth MCP · deploy_repositoryapps/apiwalidacja · cel · przyjęcie 202kolejka wdrożeń · 3 narazpowiązanie przebiegu CI · obserwacjacd.js · deployPublishedmetrics observerapi/product-store.jsstan operacji · powiązanie przebiegugitops/bridge.pyzaufana konfiguracja · zarejestrowany celcommit · push · zdalny odczyt kontrolnysynchronizacja Argo · obserwacjapubliczna sonda HTTPSArgo CDkontrola Application · AppProjectapps/<tenant>/<app>commit źródłowy · traileryrailshot-deploy.ymlpętla · kontrole bazowe L0–L3naprawa przez SDK · tylko naprawialne awariete same kontrole → sprawdzony bundlewydanie · publikacja w GHCR · powiązanieKlaster aplikacji K3sworkload · ServicePlatforma Railshotklaster operacyjny · AWSGitHubprywatne repozytorium apps · ActionsZarejestrowany celpubliczna ścieżka dla każdego dostawcy1 folder · ZIP · URL GitHub · Użytkownik przeglądarki → ekran webowy · historia · Insights12to samo API produktu · /api/v13 OAuth · deploy_repository · Klient MCP → OAuth MCP · deploy_repository34to samo API produktu5 wysłanie ZIP · deploy_local_project · railshot-local MCP → walidacja · cel · przyjęcie 20256 zapisane jako queued · 202 · walidacja · cel · przyjęcie 202 → stan operacji · powiązanie przebiegu67 kolejność w kolejce · stan operacji · powiązanie przebiegu → kolejka wdrożeń · 3 naraz78stan wdrożenia · historia1source commit2workflow_dispatch3zgłoszony commit4prośba o poprawkę · warunkowo5publikacja sprawdzonych obrazów6odczyt przebiegu · publikacji7 failed · publication_unverified · powiązanie przebiegu CI · obserwacja → stan operacji · powiązanie przebiegu71images.json · spec · verdict · manifest2zastosowanie · zarejestrowany cel3workload commit · push4revision5 synchronizacja · obserwacja · synchronizacja Argo · obserwacja → kontrola Application · AppProject56zastosowanie7pobranie obrazu · digest8HTTPS health9 ścieżka publiczna · Publiczny adres HTTPS → workload · Service910 succeeded · revision · URL · cd.js · deployPublished → stan operacji · powiązanie przebiegu1011 unknown · wymaga uzgodnienia · cd.js · deployPublished → stan operacji · powiązanie przebiegu111zapytanie PromQL2scrape · probe3stan wdrożenia · historia4HTTPS health

Zgłoszenie → przyjęcie

Ekran webowy, zdalny MCP i lokalny MCP wywołują to samo API produktu, które zapisuje sprawdzone żądanie jako queued i odpowiada 202.

  1. Użytkownik przeglądarkidane: folder · ZIP · URL GitHubekran webowy · historia · Insightsapps/dashboard

    Źródło i zarejestrowane środowisko wybiera się na ekranie webowym.

  2. ekran webowy · historia · Insightsapps/dashboarddane: to samo API produktu · /api/v1walidacja · cel · przyjęcie 202apps/api

    Ekran webowy wywołuje API produktu z tego samego originu.

  3. Klient MCPdane: OAuth · deploy_repositoryOAuth MCP · deploy_repositoryagent/remote-mcp.js

    Zdalny MCP łączy się przez OAuth i przyjmuje jako wejście publiczne repozytorium GitHub.

  4. OAuth MCP · deploy_repositoryagent/remote-mcp.jsdane: to samo API produktuwalidacja · cel · przyjęcie 202apps/api

    Zdalny serwer MCP wywołuje to samo API wdrożeń przez swojego wewnętrznego klienta API.

  5. railshot-local MCPdane: wysłanie ZIP · deploy_local_projectwalidacja · cel · przyjęcie 202apps/api

    MCP stdio na komputerze użytkownika pakuje folder do ZIP i go wysyła. Jego sesja nie jest współdzielona ze zdalną sesją OAuth.

  6. walidacja · cel · przyjęcie 202apps/apidane: zapisane jako queued · 202stan operacji · powiązanie przebieguapi/product-store.js

    Sprawdzane są wejście, zarejestrowany cel, pojemność i klucz idempotencji; operacja jest zapisywana jako queued, a odpowiedzią jest 202. 202 oznacza przyjęcie, a nie wdrożenie.

  7. stan operacji · powiązanie przebieguapi/product-store.jsdane: kolejność w kolejcekolejka wdrożeń · 3 narazapps/api

    Pobierane w kolejności przyjęcia, w limicie współbieżnych wdrożeń (domyślnie 3).

  8. stan operacji · powiązanie przebieguapi/product-store.jsobserwacja: stan wdrożenia · historiaekran webowy · historia · Insightsapps/dashboard

    Ekran webowy i narzędzia MCP odczytują te same zapisy operacji. Ostatnia próba i bieżące zweryfikowane wdrożenie są pokazywane osobno, a ukończone zadanie AI nie oznacza udanego wdrożenia.

Kontrole CI → publikacja obrazu

Przypięty kod platformy sprawdza zgłoszony commit, przekazuje AI tylko naprawialne awarie i publikuje tylko obrazy, które ponownie przeszły te same kontrole.

  1. kolejka wdrożeń · 3 narazapps/apidane: source commitcommit źródłowy · traileryapps/<tenant>/<app>

    Zgłoszone źródło staje się commitem w prywatnym repozytorium apps (z trailerami Railshot-Request i Railshot-Target), a gałąź jest aktualizowana bez force.

  2. kolejka wdrożeń · 3 narazapps/apiuruchomienie · zastosowanie: workflow_dispatchpętla · kontrole bazowe L0–L3railshot-deploy.yml

    Zleca przebieg z tenant, app, source_commit i target_id. Jeśli odpowiedź zginie, żądanie nie jest wysyłane ponownie; zamiast tego wyszukiwane są przebiegi dla tego samego commitu.

  3. commit źródłowy · traileryapps/<tenant>/<app>dane: zgłoszony commitpętla · kontrole bazowe L0–L3railshot-deploy.yml

    Wykonywany jest checkout tylko zgłoszonego commitu i przypiętego kodu platformy (PLATFORM_REF).

  4. naprawa przez SDK · tylko naprawialne awarierailshot-deploy.ymldane: prośba o poprawkę · warunkowoAI SDK provider

    Wywoływane tylko dla naprawialnych klas awarii i zatrzymywane, gdy ta sama awaria się powtarza lub osiągnięto limit prób. O zaliczeniu lub porażce decydują kontrole, nie LLM.

  5. wydanie · publikacja w GHCR · powiązanierailshot-deploy.ymldane: publikacja sprawdzonych obrazówGHCR

    Po weryfikacji bundla, który przeszedł kontrole, te same obrazy są publikowane w GHCR. Nic nie jest przebudowywane.

  6. powiązanie przebiegu CI · obserwacjaapps/apiobserwacja: odczyt przebiegu · publikacjirailshot-deploy.yml

    Publikacja się liczy tylko wtedy, gdy jej run id, commit źródłowy, cel i aplikacja zgadzają się z przyjętym zapisem.

  7. powiązanie przebiegu CI · obserwacjaapps/apiawaria · wynik nieznany: failed · publication_unverifiedstan operacji · powiązanie przebieguapi/product-store.js

    Awaria CI lub niezweryfikowana publikacja jest zapisywana z diagnostyką i nie trafia do CD.

Zastosowanie → kontrola publiczna

Stosuje zmiany przez config Git i Argo CD tylko wtedy, gdy publikacja zgadza się z zarejestrowanym celem, a sukces zapisuje dopiero po pozytywnej kontroli zarejestrowanego publicznego adresu HTTPS.

  1. wydanie · publikacja w GHCR · powiązanierailshot-deploy.ymldane: images.json · spec · verdict · manifestcd.js · deployPublishedapps/api

    CD odczytuje pliki zapisu publikacji przez zaufany loader. Samo CI nie tworzy żadnego zasobu klastra, adresu URL ani sukcesu wdrożenia.

  2. cd.js · deployPublishedapps/apiuruchomienie · zastosowanie: zastosowanie · zarejestrowany celzaufana konfiguracja · zarejestrowany celgitops/bridge.py

    Uruchamia gitops/bridge.py z zaufaną konfiguracją tylko wtedy, gdy zarejestrowana aplikacja i tenant zgadzają się z zapisem publikacji.

  3. commit · push · zdalny odczyt kontrolnygitops/bridge.pydane: workload commit · pushRepozytorium Git konfiguracji

    Commituje tylko workload.json w zarejestrowanej ścieżce dedykowanej gałęzi, najpierw zapisuje zamiar push, wykonuje push i odczytuje zdalną rewizję. Niepewny push nie jest powtarzany.

  4. Repozytorium Git konfiguracjidane: revisionkontrola Application · AppProjectArgo CD

    Rewizja repozytorium konfiguracji, na którą wskazuje Application w Argo CD.

  5. synchronizacja Argo · obserwacjagitops/bridge.pyuruchomienie · zastosowanie: synchronizacja · obserwacjakontrola Application · AppProjectArgo CD

    Zleca synchronizację po sprawdzeniu AppProject; obserwacja tylko odczytuje, bez synchronizacji.

  6. kontrola Application · AppProjectArgo CDuruchomienie · zastosowanie: zastosowanieworkload · ServiceKlaster aplikacji K3s

    Stosuje workload w zarejestrowanym klastrze docelowym.

  7. workload · ServiceKlaster aplikacji K3sdane: pobranie obrazu · digestGHCR

    Pobiera opublikowany digest. Prywatny GHCR wymaga dedykowanego poświadczenia do pobierania.

  8. publiczna sonda HTTPSgitops/bridge.pyobserwacja: HTTPS healthPubliczny adres HTTPS

    Sprawdza wyłącznie zarejestrowany przez operatora adres HTTPS health, bez przekierowań, pod kątem 200 (i oczekiwanego JSON, jeśli ustawiono).

  9. Publiczny adres HTTPSdane: ścieżka publicznaworkload · ServiceKlaster aplikacji K3s

    Ścieżka publiczna (LB, NodePort, certyfikat) różni się w zależności od dostawcy i zarejestrowanego celu.

  10. cd.js · deployPublishedapps/apidane: succeeded · revision · URLstan operacji · powiązanie przebieguapi/product-store.js

    Zapisywane jako succeeded tylko przy cd.deployed, rewizji, udanej publicznej kontroli HTTPS, jej czasie i poprawnym adresie URL.

  11. cd.js · deployPublishedapps/apiawaria · wynik nieznany: unknown · wymaga uzgodnieniastan operacji · powiązanie przebieguapi/product-store.js

    Wynik, którego nie da się poznać, pozostaje unknown; to samo zastosowanie nie jest ani wysyłane ponownie, ani wycofywane.

Obserwacja · nie werdykt

Metryki i sondy nie decydują o sukcesie wdrożenia. Brakujące, nieaktualne i nieudane wartości są pokazywane bez zmian.

  1. metrics observerapps/apiobserwacja: zapytanie PromQLPrometheus

    Odczytuje serie up, probe_success i podów. Brakujące, nieaktualne lub nieudane wartości są pokazywane w tym stanie i nigdy nie zamieniane na 0.

  2. Prometheusobserwacja: scrape · probeworkload · ServiceKlaster aplikacji K3s

    Scrape eksportera i sonda HTTP. Te metryki nie służą do rozstrzygania o sukcesie wdrożenia.

  3. stan operacji · powiązanie przebieguapi/product-store.jsobserwacja: stan wdrożenia · historiaekran webowy · historia · Insightsapps/dashboard

    Ekran webowy i narzędzia MCP odczytują te same zapisy operacji. Ostatnia próba i bieżące zweryfikowane wdrożenie są pokazywane osobno, a ukończone zadanie AI nie oznacza udanego wdrożenia.

  4. publiczna sonda HTTPSgitops/bridge.pyobserwacja: HTTPS healthPubliczny adres HTTPS

    Sprawdza wyłącznie zarejestrowany przez operatora adres HTTPS health, bez przekierowań, pod kątem 200 (i oczekiwanego JSON, jeśli ustawiono).

Każde połączenie z tą samą wagą. Wybór przepływu wyróżnia tylko jego ścieżkę z ponumerowanymi krokami.

  • Linia ciągła · kierunek przepływu źródeł, obrazów i żądań
  • Linia przerywana · żądanie uruchomienia, zastosowanie lub synchronizacja
  • Długa kreska z kropką · odczyty stanu, sondy i metryki, oddzielnie od werdyktu
  • Krótka kreska · zapisana awaria lub wynik nieznany
  • Gruba czarna linia · wybrany przepływ; liczby podają kolejność
  • Ramka · granica własności, ścieżka źródła w nagłówku
  • Wewnętrzny element · komponent w tej granicy
  • Przerywana ramka · poza platformą
  • Pomarańczowy obrys · miejsce, w którym decyduje model
  • API produktu
  • Zapisy wdrożeń
  • Granica wykonania CD
  • Wejście · CI · cel

Rysunek z October 2 (bc61a5a) w docs/architecture/README.md to historia implementacji; ta architektura odpowiada kodowi 645e28a. Dostawcy i ścieżki sieciowe różnią się w zależności od zarejestrowanego celu, co nie oznacza, że każdy dostawca jest zawsze włączony.