Railshot
AI deployment & operations platform
Udrul en lokalt bygget webapp i forberedte cloud- og on-premises-miljøer, og driv den derefter.
En AI-platform til udrulning og drift, der bringer en lokalt bygget webapp til forberedte cloud- eller on-premises-miljøer og holder den kørende.
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
Webskærmen og brugerens egen agent anmoder om udrulning via samme produkt-API.
Produktet fra en accepteret udrulningsanmodning gennem CI-kontroller og publicering af image til Git-konfiguration og Argo CD-udrulning på et registreret mål og verifikation af offentlig HTTPS. Succes registreres kun med både en anvendt revision og en offentlig kontrol; et udfald, der ikke kan fastslås, forbliver unknown.
Når et projekt indsendes fra webskærmen eller fra en AI-agent forbundet via MCP, gennemføres forberedelse af udrulningsfiler, reparation af fejl, publicering af image, udrulning i miljøet og verifikation af den offentlige URL; efter udrulningen viser samme skærm historik og logs og styrer opdateringer, stop, genoptagelser og sletning. Et teamprojekt.
Konkurrencens udviklingsperiode 28. september 2026 til 4. oktober 2026
Webskærmen og MCP-serveren, der blev bygget under hackathonen. Ekstern MCP logger ind med OAuth for at indsende; lokale mapper indsendes via den lokale MCP.
Indsend → accept
Webskærmen, den eksterne MCP og den lokale MCP kalder samme produkt-API, der registrerer en kontrolleret forespørgsel som queued og svarer 202.
Browserbrugerdata: mappe · ZIP · GitHub-URLwebskærm · historik · Insights
apps/dashboardKilden og et registreret miljø vælges på webskærmen.
webskærm · historik · Insights
apps/dashboarddata: samme produkt-API · /api/v1validér · mål · accept med 202apps/apiWebskærmen kalder produkt-API'et fra samme oprindelse.
MCP-klientdata: OAuth · deploy_repositoryOAuth MCP · deploy_repository
agent/remote-mcp.jsDen eksterne MCP forbinder via OAuth og tager et offentligt GitHub-repository som input.
OAuth MCP · deploy_repository
agent/remote-mcp.jsdata: samme produkt-APIvalidér · mål · accept med 202apps/apiDen eksterne MCP-server kalder samme udrulnings-API via sin interne API-klient.
railshot-local MCPdata: ZIP-upload · deploy_local_projectvalidér · mål · accept med 202
apps/apiStdio-MCP'en på brugerens computer pakker en mappe som ZIP og uploader den. Dens session deles ikke med den eksterne OAuth-session.
validér · mål · accept med 202
apps/apidata: registreret som queued · 202operationstilstand · kørselsbindingapi/product-store.jsInput, registreret mål, kapacitet og idempotensnøgle kontrolleres; operationen registreres som queued og besvares med 202. 202 betyder accepteret, ikke udrullet.
operationstilstand · kørselsbinding
api/product-store.jsdata: rækkefølge i køudrulningskø · 3 ad gangenapps/apiTages i den rækkefølge, de blev accepteret, inden for grænsen for samtidige udrulninger (som standard 3).
operationstilstand · kørselsbinding
api/product-store.jsobservation: udrulningstilstand · historikwebskærm · historik · Insightsapps/dashboardWebskærmen og MCP-værktøjerne læser de samme operationslogs. Det seneste forsøg og den aktuelle verificerede udrulning vises separat, og en færdig AI-opgave er ikke en vellykket udrulning.
CI-kontroller → publicering af image
Fastlåst platformkode kontrollerer den indsendte commit, giver kun fejl, der kan rettes, til AI og publicerer kun images, der har bestået de samme kontroller igen.
udrulningskø · 3 ad gangen
apps/apidata: source commitkilde-commit · trailersapps/<tenant>/<app>Den indsendte kilde bliver til en commit i det private apps-repository (med trailerne Railshot-Request og Railshot-Target), og grenen opdateres uden force.
udrulningskø · 3 ad gangen
apps/apikøre · anvende: workflow_dispatchløkke · basiskontroller L0–L3railshot-deploy.ymlAnmoder om en kørsel med tenant, app, source_commit og target_id. Hvis svaret går tabt, sendes den ikke igen; i stedet søges der efter kørsler for samme commit.
kilde-commit · trailers
apps/<tenant>/<app>data: indsendt commitløkke · basiskontroller L0–L3railshot-deploy.ymlKun den indsendte commit og fastlåst platformkode (PLATFORM_REF) checkes ud.
SDK-reparation · kun fejl, der kan rettes
railshot-deploy.ymldata: anmodning om reparation · betingetAI SDK providerKaldes kun for fejlklasser, der kan rettes, og stoppes, når den samme fejl gentager sig, eller grænsen for forsøg nås. Bestået eller ikke bestået afgøres af kontrollerne, ikke af LLM'en.
release · publicering til GHCR · binding
railshot-deploy.ymldata: publicér kontrollerede imagesGHCREfter verifikation af den bundle, der bestod kontrollerne, publiceres de samme images til GHCR. Intet bygges igen.
binding af CI-kørsel · observér
apps/apiobservation: kørsel · læsning af publiceringrailshot-deploy.ymlEn publicering tæller kun, når dens run id, source commit, target og app svarer til den accepterede post.
binding af CI-kørsel · observér
apps/apifejl · ukendt udfald: failed · publication_unverifiedoperationstilstand · kørselsbindingapi/product-store.jsEn CI-fejl eller en uverificeret publicering registreres med diagnostik og sendes ikke videre til CD.
Anvend → offentlig kontrol
Anvender via config-Git og Argo CD, kun når publiceringen svarer til det registrerede mål, og registrerer først succes, når den registrerede offentlige HTTPS-adresse er kontrolleret.
release · publicering til GHCR · binding
railshot-deploy.ymldata: images.json · spec · verdict · manifestcd.js · deployPublishedapps/apiCD læser publiceringsloggens filer via en betroet loader. CI skaber ikke selv nogen klyngeressource, URL eller vellykket udrulning.
cd.js · deployPublished
apps/apikøre · anvende: apply · registreret målbetroet config · registreret målgitops/bridge.pyKører gitops/bridge.py med den betroede config, kun når den registrerede app og tenant svarer til publiceringsloggen.
commit · push · ekstern tilbagelæsning
gitops/bridge.pydata: workload commit · pushConfig-Git-repoCommitter kun workload.json på den registrerede sti i en dedikeret gren, registrerer først push-hensigten, pusher og læser den eksterne revision tilbage. Et usikkert push gentages ikke.
Config-Git-repodata: revisionApplication · AppProject-kontrol
Argo CDRevisionen i config-repositoryet, som Argo CD-Application peger på.
Argo sync · observér
gitops/bridge.pykøre · anvende: sync · observérApplication · AppProject-kontrolArgo CDAnmoder om en sync efter kontrol af AppProject; observation læser kun, uden sync.
Application · AppProject-kontrol
Argo CDkøre · anvende: anvendworkload · ServiceK3s-appklyngeAnvender workloaden på den registrerede målklynge.
workload · Service
K3s-appklyngedata: image-pull · digestGHCRHenter den publicerede digest. En privat GHCR kræver en dedikeret pull-legitimation.
offentlig HTTPS-probe
gitops/bridge.pyobservation: HTTPS healthOffentlig HTTPS-URLKontrollerer kun den HTTPS-health-adresse, operatøren har registreret, uden omdirigeringer, for 200 (og den forventede JSON, hvis angivet).
Offentlig HTTPS-URLdata: offentlig stiworkload · Service
K3s-appklyngeDen offentlige sti (LB, NodePort, certifikat) varierer efter provider og registreret mål.
cd.js · deployPublished
apps/apidata: succeeded · revision · URLoperationstilstand · kørselsbindingapi/product-store.jsRegistreres som succeeded kun med cd.deployed, en revision, en vellykket offentlig HTTPS-kontrol, tidspunktet for den og en gyldig URL.
cd.js · deployPublished
apps/apifejl · ukendt udfald: unknown · kræver afstemningoperationstilstand · kørselsbindingapi/product-store.jsEt udfald, der ikke kan kendes, forbliver unknown; den samme apply sendes hverken igen eller rulles tilbage.
Observation · ikke dommen
Metrikker og prober afgør ikke, om udrulningen lykkedes. Manglende, forældede og fejlede værdier vises, som de er.
metrics observer
apps/apiobservation: PromQL-forespørgselPrometheusLæser serierne up, probe_success og Pod. Manglende, forældede eller fejlede værdier vises i den tilstand og laves aldrig om til 0.
Prometheusobservation: scrape · probeworkload · Service
K3s-appklyngeExporter-scrape og HTTP-probe. Disse metrikker bruges ikke til at afgøre, om udrulningen lykkedes.
operationstilstand · kørselsbinding
api/product-store.jsobservation: udrulningstilstand · historikwebskærm · historik · Insightsapps/dashboardWebskærmen og MCP-værktøjerne læser de samme operationslogs. Det seneste forsøg og den aktuelle verificerede udrulning vises separat, og en færdig AI-opgave er ikke en vellykket udrulning.
offentlig HTTPS-probe
gitops/bridge.pyobservation: HTTPS healthOffentlig HTTPS-URLKontrollerer kun den HTTPS-health-adresse, operatøren har registreret, uden omdirigeringer, for 200 (og den forventede JSON, hvis angivet).
Alle forbindelser med samme tykkelse. Vælg et flow for kun at fremhæve dets vej med nummererede trin.
- Fuldt optrukket · den retning, kilde, images og forespørgsler flyder
- Stiplet · kørselsanmodning, anvend eller sync
- Lang streg-prik · statuslæsninger, prober og metrikker, adskilt fra dommen
- Kort streg · en registreret fejl eller et ukendt udfald
- Kraftig sort linje · det valgte flow; tal angiver rækkefølgen
- Boks · en ejende grænse med kildestien i overskriften
- Indre chip · en komponent inden for grænsen
- Stiplet boks · uden for platformen
- Orange kontur · hvor en model træffer beslutninger
- Produkt-API
- Udrulningslogs
- CD-udførelsesgrænse
- Indgang · CI · mål
Billedet fra 2. oktober (bc61a5a) i docs/architecture/README.md er implementeringshistorik; denne arkitektur følger koden ved 645e28a. Providers og netværksstier varierer efter registreret mål, og det betyder ikke, at alle providers altid er slået til.