RAILSHOT.
Terug naar de zaal

Railshot

AI deployment & operations platform

Een lokaal gebouwde webapp uitrollen naar voorbereide cloud- en on-premises-omgevingen en daarna laten draaien.

Een AI-platform voor uitrol en beheer dat een lokaal gebouwde webapp naar voorbereide cloud- of on-premises-omgevingen brengt en blijft laten draaien.

2026.09.28 tot 2026.10.04 · Afgerond

Teamproject · mijn aandeel: CI-planning en -implementatie, CSP-clusters en Ansible-interface, beheer, codereview en integratie in het team

SoftBank Hackathon 2026 powered by KOREC & ProgateDeelnemer voorronde · selectie voor de finale bekend op 2026.10.26 (stand 2026.10.07)

  • WebGeïmplementeerd · hackathon
  • MCP-serverGeïmplementeerd · remote · lokaal

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

Het webscherm en een eigen agent vragen de uitrol aan via dezelfde product-API.

Het product van een geaccepteerd uitrolverzoek, via CI-controles en het publiceren van images, tot Git-configuratie en Argo CD-uitrol op een geregistreerd doel en verificatie van de publieke HTTPS. Succes wordt alleen vastgelegd met zowel een toegepaste revisie als een publieke controle; een uitkomst die niet bekend kan zijn, blijft unknown.

Een project wordt ingediend via het webscherm, of vanuit een eigen AI-agent die via MCP is verbonden, en doorloopt het voorbereiden van uitrolbestanden, het herstellen van fouten, het publiceren van images, de uitrol naar de omgeving en de verificatie van de publieke URL; na de uitrol toont hetzelfde scherm geschiedenis en logs en beheert het updates, stops, hervattingen en verwijdering. Een teamproject.

Ontwikkelperiode van het evenement van September 28, 2026 tot October 4, 2026

Het webscherm en de MCP-server die tijdens de hackathon zijn gebouwd. De remote MCP logt in met OAuth om in te dienen; lokale mappen worden via de lokale MCP ingediend.

Productarchitectuur · getekend op basis van de codepaden in publieke commit 645e28a
Productarchitectuur van RailshotComponenten en verbindingen van het product Railshot. Het webscherm, de remote OAuth-MCP en een lokale MCP op de computer van de gebruiker vragen de uitrol aan via dezelfde product-API, die een broncommit en een CI-run registreert. CI beslist met vaste controles en publiceert de gecontroleerde images naar GHCR. De CD-adapter past alleen toe via config-Git en Argo CD als het geregistreerde doel overeenkomt met de publicatievastlegging, controleert daarna het geregistreerde publieke HTTPS-adres en legt de uitkomst vast. Metrics zijn observatie, los van het oordeel.Browsergebruikermap · ZIP · GitHub-URLMCP-clientChatGPT · Codex · Clauderailshot-local MCPcomputer van de gebruiker · stdioGHCRimages per digestAI SDK providerCodex · Claude SDKConfig-Git-repogeregistreerde workload.jsonPublieke HTTPS-URLgeregistreerd healthpadPrometheusoperationele control-VM · lezenapps/dashboardwebscherm · geschiedenis · Insightsagent/remote-mcp.jsOAuth MCP · deploy_repositoryapps/apivalideren · doel · 202-acceptatieuitrolqueue · 3 tegelijkCI-runkoppeling · observerencd.js · deployPublishedmetrics observerapi/product-store.jsoperationtoestand · runkoppelinggitops/bridge.pyvertrouwde config · geregistreerd doelcommit · push · remote teruglezenArgo-sync · observerenpublieke HTTPS-probeArgo CDApplication · AppProject-controleapps/<tenant>/<app>broncommit · trailersrailshot-deploy.ymlloop · basiscontroles L0–L3SDK-reparatie · alleen herstelbare foutendezelfde controles → geteste bundlerelease · GHCR-publicatie · koppelingK3s-appclusterworkload · ServiceRailshot-platformoperationeel cluster · AWSGitHubprivate apps-repo · ActionsGeregistreerd doelpubliek pad per provider1 map · ZIP · GitHub-URL · Browsergebruiker → webscherm · geschiedenis · Insights12dezelfde product-API · /api/v13 OAuth · deploy_repository · MCP-client → OAuth MCP · deploy_repository34dezelfde product-API5 ZIP-upload · deploy_local_project · railshot-local MCP → valideren · doel · 202-acceptatie56 vastgelegd als queued · 202 · valideren · doel · 202-acceptatie → operationtoestand · runkoppeling67 volgorde in de queue · operationtoestand · runkoppeling → uitrolqueue · 3 tegelijk78uitroltoestand · geschiedenis1source commit2workflow_dispatch3ingediende commit4herstelverzoek · voorwaardelijk5gecontroleerde images publiceren6run · publicatie lezen7 failed · publication_unverified · CI-runkoppeling · observeren → operationtoestand · runkoppeling71images.json · spec · verdict · manifest2apply · geregistreerd doel3workload commit · push4revision5sync · observeren6toepassen7image pull · digest8HTTPS health9 publiek pad · Publieke HTTPS-URL → workload · Service910 succeeded · revision · URL · cd.js · deployPublished → operationtoestand · runkoppeling1011 unknown · reconciliatie nodig · cd.js · deployPublished → operationtoestand · runkoppeling111PromQL-query2scrape · probe3uitroltoestand · geschiedenis4HTTPS health

Indienen → accepteren

Het webscherm, de remote MCP en de lokale MCP roepen dezelfde product-API aan, die een gecontroleerd verzoek als queued vastlegt en met 202 antwoordt.

  1. Browsergebruikergegevens: map · ZIP · GitHub-URLwebscherm · geschiedenis · Insightsapps/dashboard

    De bron en een geregistreerde omgeving worden in het webscherm gekozen.

  2. webscherm · geschiedenis · Insightsapps/dashboardgegevens: dezelfde product-API · /api/v1valideren · doel · 202-acceptatieapps/api

    Het webscherm roept de product-API aan vanaf dezelfde origin.

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

    De remote MCP verbindt via OAuth en neemt een publieke GitHub-repository als input.

  4. OAuth MCP · deploy_repositoryagent/remote-mcp.jsgegevens: dezelfde product-APIvalideren · doel · 202-acceptatieapps/api

    De remote MCP-server roept dezelfde uitrol-API aan via zijn interne API-client.

  5. railshot-local MCPgegevens: ZIP-upload · deploy_local_projectvalideren · doel · 202-acceptatieapps/api

    De stdio-MCP op de computer van de gebruiker zipt een map en uploadt die. De sessie wordt niet gedeeld met de remote OAuth-sessie.

  6. valideren · doel · 202-acceptatieapps/apigegevens: vastgelegd als queued · 202operationtoestand · runkoppelingapi/product-store.js

    Input, geregistreerd doel, capaciteit en idempotentiesleutel worden gecontroleerd; de operation wordt als queued vastgelegd en beantwoord met 202. Een 202 betekent geaccepteerd, niet uitgerold.

  7. operationtoestand · runkoppelingapi/product-store.jsgegevens: volgorde in de queueuitrolqueue · 3 tegelijkapps/api

    Opgepakt in volgorde van acceptatie, binnen de limiet voor gelijktijdige uitrol (standaard 3).

  8. operationtoestand · runkoppelingapi/product-store.jsobservatie: uitroltoestand · geschiedeniswebscherm · geschiedenis · Insightsapps/dashboard

    Het webscherm en de MCP-tools lezen dezelfde operationvastleggingen. De laatste poging en de huidige geverifieerde uitrol worden apart getoond, en een voltooide AI-taak is geen uitrolsucces.

CI-controles → image publiceren

Vastgezette platformcode controleert de ingediende commit, geeft alleen herstelbare fouten aan AI en publiceert alleen images die dezelfde controles opnieuw doorstonden.

  1. uitrolqueue · 3 tegelijkapps/apigegevens: source commitbroncommit · trailersapps/<tenant>/<app>

    De ingediende bron wordt een commit in de private apps-repository (met de trailers Railshot-Request en Railshot-Target), en de branch wordt zonder force bijgewerkt.

  2. uitrolqueue · 3 tegelijkapps/apiuitvoeren · toepassen: workflow_dispatchloop · basiscontroles L0–L3railshot-deploy.yml

    Vraagt een run aan met tenant, app, source_commit en target_id. Gaat het antwoord verloren, dan wordt het niet opnieuw verstuurd; in plaats daarvan worden de runs voor dezelfde commit gezocht.

  3. broncommit · trailersapps/<tenant>/<app>gegevens: ingediende commitloop · basiscontroles L0–L3railshot-deploy.yml

    Alleen de ingediende commit en vastgezette platformcode (PLATFORM_REF) worden uitgecheckt.

  4. SDK-reparatie · alleen herstelbare foutenrailshot-deploy.ymlgegevens: herstelverzoek · voorwaardelijkAI SDK provider

    Wordt alleen aangeroepen voor herstelbare foutklassen en stopt wanneer dezelfde fout zich herhaalt of de pogingslimiet is bereikt. Slagen of falen wordt bepaald door de controles, niet door het LLM.

  5. release · GHCR-publicatie · koppelingrailshot-deploy.ymlgegevens: gecontroleerde images publicerenGHCR

    Na verificatie van de bundle die de controles doorstond, worden dezelfde images naar GHCR gepubliceerd. Er wordt niets opnieuw gebouwd.

  6. CI-runkoppeling · observerenapps/apiobservatie: run · publicatie lezenrailshot-deploy.yml

    Een publicatie telt alleen als run-id, broncommit, doel en app overeenkomen met de geaccepteerde vastlegging.

  7. CI-runkoppeling · observerenapps/apimislukking · onbekende uitkomst: failed · publication_unverifiedoperationtoestand · runkoppelingapi/product-store.js

    Een CI-fout of een niet-geverifieerde publicatie wordt met diagnostiek vastgelegd en niet aan CD doorgegeven.

Toepassen → publieke controle

Past alleen toe via config-Git en Argo CD als de publicatie overeenkomt met het geregistreerde doel, en legt pas succes vast nadat het geregistreerde publieke HTTPS-adres de controle doorstaat.

  1. release · GHCR-publicatie · koppelingrailshot-deploy.ymlgegevens: images.json · spec · verdict · manifestcd.js · deployPublishedapps/api

    CD leest de bestanden van de publicatievastlegging via een vertrouwde loader. CI zelf maakt geen clusterresource, URL of uitrolsucces aan.

  2. cd.js · deployPublishedapps/apiuitvoeren · toepassen: apply · geregistreerd doelvertrouwde config · geregistreerd doelgitops/bridge.py

    Draait gitops/bridge.py met de vertrouwde config alleen als de geregistreerde app en tenant overeenkomen met de publicatievastlegging.

  3. commit · push · remote teruglezengitops/bridge.pygegevens: workload commit · pushConfig-Git-repo

    Commit alleen workload.json op het geregistreerde pad van een eigen branch, legt eerst de push-intentie vast, pusht en leest de remote revisie terug. Een onzekere push wordt niet herhaald.

  4. Config-Git-repogegevens: revisionApplication · AppProject-controleArgo CD

    De revisie van de configrepository waarnaar de Argo CD-Application wijst.

  5. Argo-sync · observerengitops/bridge.pyuitvoeren · toepassen: sync · observerenApplication · AppProject-controleArgo CD

    Vraagt een sync aan na controle van het AppProject; observeren leest alleen, zonder sync.

  6. Application · AppProject-controleArgo CDuitvoeren · toepassen: toepassenworkload · ServiceK3s-appcluster

    Past de workload toe op het geregistreerde doelcluster.

  7. workload · ServiceK3s-appclustergegevens: image pull · digestGHCR

    Haalt de gepubliceerde digest op. Een private GHCR heeft een eigen pull-credential nodig.

  8. publieke HTTPS-probegitops/bridge.pyobservatie: HTTPS healthPublieke HTTPS-URL

    Controleert alleen het door de operator geregistreerde HTTPS-health-adres, zonder redirects, op 200 (en de verwachte JSON indien ingesteld).

  9. Publieke HTTPS-URLgegevens: publiek padworkload · ServiceK3s-appcluster

    Het publieke pad (LB, NodePort, certificaat) verschilt per provider en geregistreerd doel.

  10. cd.js · deployPublishedapps/apigegevens: succeeded · revision · URLoperationtoestand · runkoppelingapi/product-store.js

    Alleen vastgelegd als succeeded met cd.deployed, een revisie, een geslaagde publieke HTTPS-controle, het tijdstip daarvan en een geldige URL.

  11. cd.js · deployPublishedapps/apimislukking · onbekende uitkomst: unknown · reconciliatie nodigoperationtoestand · runkoppelingapi/product-store.js

    Een uitkomst die niet bekend kan zijn, blijft unknown; dezelfde apply wordt niet opnieuw verstuurd en niet teruggedraaid.

Observatie · niet het oordeel

Metrics en probes bepalen geen uitrolsucces. Ontbrekende, verouderde en mislukte waarden worden getoond zoals ze zijn.

  1. metrics observerapps/apiobservatie: PromQL-queryPrometheus

    Leest up, probe_success en Pod-reeksen. Ontbrekende, verouderde of mislukte waarden worden in die toestand getoond en nooit 0 gemaakt.

  2. Prometheusobservatie: scrape · probeworkload · ServiceK3s-appcluster

    Exporter-scrape en HTTP-probe. Deze metrics worden niet gebruikt om uitrolsucces te bepalen.

  3. operationtoestand · runkoppelingapi/product-store.jsobservatie: uitroltoestand · geschiedeniswebscherm · geschiedenis · Insightsapps/dashboard

    Het webscherm en de MCP-tools lezen dezelfde operationvastleggingen. De laatste poging en de huidige geverifieerde uitrol worden apart getoond, en een voltooide AI-taak is geen uitrolsucces.

  4. publieke HTTPS-probegitops/bridge.pyobservatie: HTTPS healthPublieke HTTPS-URL

    Controleert alleen het door de operator geregistreerde HTTPS-health-adres, zonder redirects, op 200 (en de verwachte JSON indien ingesteld).

Alle verbindingen even zwaar. Kies een stroom om alleen het pad daarvan te markeren, met genummerde stappen.

  • Doorgetrokken · richting waarin bron, images en verzoeken stromen
  • Gestreept · runverzoek, toepassen of sync
  • Lange streep-punt · statusopvragingen, probes en metrics, los van het oordeel
  • Kort gestreept · een vastgelegde mislukking of onbekende uitkomst
  • Dikke zwarte lijn · de gekozen stroom; nummers geven de volgorde
  • Vak · een eigendomsgrens, met het bronpad in de kop
  • Binnenchip · een component binnen die grens
  • Gestreept vak · buiten het platform
  • Oranje omlijning · waar een model beslist
  • Product-API
  • Uitrolvastleggingen
  • CD-uitvoeringsgrens
  • Instap · CI · doel

Het beeld van October 2 (bc61a5a) in docs/architecture/README.md is implementatiegeschiedenis; deze architectuur volgt de code van 645e28a. Providers en netwerkpaden verschillen per geregistreerd doel, en dit betekent niet dat elke provider altijd aan staat.