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.
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
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.
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.
Browsergebruikergegevens: map · ZIP · GitHub-URLwebscherm · geschiedenis · Insights
apps/dashboardDe bron en een geregistreerde omgeving worden in het webscherm gekozen.
webscherm · geschiedenis · Insights
apps/dashboardgegevens: dezelfde product-API · /api/v1valideren · doel · 202-acceptatieapps/apiHet webscherm roept de product-API aan vanaf dezelfde origin.
MCP-clientgegevens: OAuth · deploy_repositoryOAuth MCP · deploy_repository
agent/remote-mcp.jsDe remote MCP verbindt via OAuth en neemt een publieke GitHub-repository als input.
OAuth MCP · deploy_repository
agent/remote-mcp.jsgegevens: dezelfde product-APIvalideren · doel · 202-acceptatieapps/apiDe remote MCP-server roept dezelfde uitrol-API aan via zijn interne API-client.
railshot-local MCPgegevens: ZIP-upload · deploy_local_projectvalideren · doel · 202-acceptatie
apps/apiDe stdio-MCP op de computer van de gebruiker zipt een map en uploadt die. De sessie wordt niet gedeeld met de remote OAuth-sessie.
valideren · doel · 202-acceptatie
apps/apigegevens: vastgelegd als queued · 202operationtoestand · runkoppelingapi/product-store.jsInput, geregistreerd doel, capaciteit en idempotentiesleutel worden gecontroleerd; de operation wordt als queued vastgelegd en beantwoord met 202. Een 202 betekent geaccepteerd, niet uitgerold.
operationtoestand · runkoppeling
api/product-store.jsgegevens: volgorde in de queueuitrolqueue · 3 tegelijkapps/apiOpgepakt in volgorde van acceptatie, binnen de limiet voor gelijktijdige uitrol (standaard 3).
operationtoestand · runkoppeling
api/product-store.jsobservatie: uitroltoestand · geschiedeniswebscherm · geschiedenis · Insightsapps/dashboardHet 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.
uitrolqueue · 3 tegelijk
apps/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.
uitrolqueue · 3 tegelijk
apps/apiuitvoeren · toepassen: workflow_dispatchloop · basiscontroles L0–L3railshot-deploy.ymlVraagt 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.
broncommit · trailers
apps/<tenant>/<app>gegevens: ingediende commitloop · basiscontroles L0–L3railshot-deploy.ymlAlleen de ingediende commit en vastgezette platformcode (PLATFORM_REF) worden uitgecheckt.
SDK-reparatie · alleen herstelbare fouten
railshot-deploy.ymlgegevens: herstelverzoek · voorwaardelijkAI SDK providerWordt 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.
release · GHCR-publicatie · koppeling
railshot-deploy.ymlgegevens: gecontroleerde images publicerenGHCRNa verificatie van de bundle die de controles doorstond, worden dezelfde images naar GHCR gepubliceerd. Er wordt niets opnieuw gebouwd.
CI-runkoppeling · observeren
apps/apiobservatie: run · publicatie lezenrailshot-deploy.ymlEen publicatie telt alleen als run-id, broncommit, doel en app overeenkomen met de geaccepteerde vastlegging.
CI-runkoppeling · observeren
apps/apimislukking · onbekende uitkomst: failed · publication_unverifiedoperationtoestand · runkoppelingapi/product-store.jsEen 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.
release · GHCR-publicatie · koppeling
railshot-deploy.ymlgegevens: images.json · spec · verdict · manifestcd.js · deployPublishedapps/apiCD leest de bestanden van de publicatievastlegging via een vertrouwde loader. CI zelf maakt geen clusterresource, URL of uitrolsucces aan.
cd.js · deployPublished
apps/apiuitvoeren · toepassen: apply · geregistreerd doelvertrouwde config · geregistreerd doelgitops/bridge.pyDraait gitops/bridge.py met de vertrouwde config alleen als de geregistreerde app en tenant overeenkomen met de publicatievastlegging.
commit · push · remote teruglezen
gitops/bridge.pygegevens: workload commit · pushConfig-Git-repoCommit 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.
Config-Git-repogegevens: revisionApplication · AppProject-controle
Argo CDDe revisie van de configrepository waarnaar de Argo CD-Application wijst.
Argo-sync · observeren
gitops/bridge.pyuitvoeren · toepassen: sync · observerenApplication · AppProject-controleArgo CDVraagt een sync aan na controle van het AppProject; observeren leest alleen, zonder sync.
Application · AppProject-controle
Argo CDuitvoeren · toepassen: toepassenworkload · ServiceK3s-appclusterPast de workload toe op het geregistreerde doelcluster.
workload · Service
K3s-appclustergegevens: image pull · digestGHCRHaalt de gepubliceerde digest op. Een private GHCR heeft een eigen pull-credential nodig.
publieke HTTPS-probe
gitops/bridge.pyobservatie: HTTPS healthPublieke HTTPS-URLControleert alleen het door de operator geregistreerde HTTPS-health-adres, zonder redirects, op 200 (en de verwachte JSON indien ingesteld).
Publieke HTTPS-URLgegevens: publiek padworkload · Service
K3s-appclusterHet publieke pad (LB, NodePort, certificaat) verschilt per provider en geregistreerd doel.
cd.js · deployPublished
apps/apigegevens: succeeded · revision · URLoperationtoestand · runkoppelingapi/product-store.jsAlleen vastgelegd als succeeded met cd.deployed, een revisie, een geslaagde publieke HTTPS-controle, het tijdstip daarvan en een geldige URL.
cd.js · deployPublished
apps/apimislukking · onbekende uitkomst: unknown · reconciliatie nodigoperationtoestand · runkoppelingapi/product-store.jsEen 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.
metrics observer
apps/apiobservatie: PromQL-queryPrometheusLeest up, probe_success en Pod-reeksen. Ontbrekende, verouderde of mislukte waarden worden in die toestand getoond en nooit 0 gemaakt.
Prometheusobservatie: scrape · probeworkload · Service
K3s-appclusterExporter-scrape en HTTP-probe. Deze metrics worden niet gebruikt om uitrolsucces te bepalen.
operationtoestand · runkoppeling
api/product-store.jsobservatie: uitroltoestand · geschiedeniswebscherm · geschiedenis · Insightsapps/dashboardHet 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.
publieke HTTPS-probe
gitops/bridge.pyobservatie: HTTPS healthPublieke HTTPS-URLControleert 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.