Railshot
AI deployment & operations platform
Implementarea unei aplicații web construite local în medii cloud și on-premises pregătite, apoi operarea ei.
O platformă AI de implementare și operare care duce o aplicație web construită local în medii cloud sau on-premises pregătite și o ține în funcțiune.
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
Interfața web și agentul propriu al utilizatorului cer implementarea prin același API al produsului.
Produsul, de la o cerere de implementare acceptată, prin verificările CI și publicarea imaginii, până la configurația Git și lansarea Argo CD pe o țintă înregistrată și verificarea HTTPS publică. Succesul este înregistrat doar cu o revizie aplicată și o verificare publică; un rezultat care nu poate fi cunoscut rămâne unknown.
Un proiect trimis din interfața web sau dintr-un agent AI propriu conectat prin MCP trece prin pregătirea fișierelor de implementare, repararea eșecurilor, publicarea imaginii, lansarea în mediu și verificarea URL-ului public; după implementare, același ecran arată istoricul și jurnalele și gestionează actualizările, oprirea, reluarea și ștergerea. Un proiect de echipă.
Perioada de dezvoltare a competiției: 28 septembrie 2026 – 4 octombrie 2026
Interfața web și serverul MCP construite în timpul hackathonului. MCP-ul la distanță se autentifică prin OAuth pentru a trimite; folderele locale sunt trimise prin MCP-ul local.
Trimitere → acceptare
Interfața web, MCP-ul la distanță și MCP-ul local apelează același API al produsului, care înregistrează o cerere verificată ca queued și răspunde cu 202.
Utilizator în browserdate: folder · ZIP · URL GitHubinterfață web · istoric · Insights
apps/dashboardSursa și un mediu înregistrat sunt alese în interfața web.
interfață web · istoric · Insights
apps/dashboarddate: același API al produsului · /api/v1validare · țintă · acceptare 202apps/apiInterfața web apelează API-ul produsului de pe aceeași origine.
Client MCPdate: OAuth · deploy_repositoryOAuth MCP · deploy_repository
agent/remote-mcp.jsMCP-ul la distanță se conectează prin OAuth și primește ca intrare un depozit GitHub public.
OAuth MCP · deploy_repository
agent/remote-mcp.jsdate: același API al produsuluivalidare · țintă · acceptare 202apps/apiServerul MCP la distanță apelează același API de implementare prin clientul său API intern.
railshot-local MCPdate: încărcare ZIP · deploy_local_projectvalidare · țintă · acceptare 202
apps/apiMCP-ul stdio de pe computerul utilizatorului arhivează un folder în ZIP și îl încarcă. Sesiunea lui nu este partajată cu sesiunea OAuth la distanță.
validare · țintă · acceptare 202
apps/apidate: queued înregistrat · 202starea operației · legarea rulăriiapi/product-store.jsSunt verificate intrarea, ținta înregistrată, capacitatea și cheia de idempotență; operația este înregistrată ca queued și se răspunde cu 202. Un 202 înseamnă acceptat, nu implementat.
starea operației · legarea rulării
api/product-store.jsdate: ordinea din coadăcoadă de implementare · câte 3apps/apiPreluate în ordinea acceptării, în limita implementărilor concurente (implicit 3).
starea operației · legarea rulării
api/product-store.jsobservație: starea implementării · istoricinterfață web · istoric · Insightsapps/dashboardInterfața web și instrumentele MCP citesc aceleași înregistrări ale operațiilor. Ultima încercare și implementarea verificată curentă sunt afișate separat, iar o sarcină AI încheiată nu înseamnă o implementare reușită.
Verificări CI → publicarea imaginii
Codul de platformă fixat verifică commitul trimis, predă AI-ului doar eșecurile reparabile și publică doar imaginile care au trecut din nou aceleași verificări.
coadă de implementare · câte 3
apps/apidate: source commitcommit sursă · trailereapps/<tenant>/<app>Sursa trimisă devine un commit în depozitul privat apps (cu trailerele Railshot-Request și Railshot-Target), iar ramura este actualizată fără force.
coadă de implementare · câte 3
apps/apirulare · aplicare: workflow_dispatchbuclă · verificări de bază L0–L3railshot-deploy.ymlCere o rulare cu tenant, app, source_commit și target_id. Dacă răspunsul se pierde, cererea nu este trimisă din nou; sunt căutate în schimb rulările pentru același commit.
commit sursă · trailere
apps/<tenant>/<app>date: commitul trimisbuclă · verificări de bază L0–L3railshot-deploy.ymlSe face checkout doar pentru commitul trimis și pentru codul de platformă fixat (PLATFORM_REF).
reparare SDK · doar eșecuri reparabile
railshot-deploy.ymldate: cerere de reparare · condiționatăAI SDK providerEste apelat doar pentru clase de eșec reparabile și se oprește când același eșec se repetă sau se atinge limita de încercări. Trecerea sau eșecul sunt decise de verificări, nu de LLM.
versiune · publicare în GHCR · legare
railshot-deploy.ymldate: publicarea imaginilor verificateGHCRDupă verificarea pachetului care a trecut verificările, aceleași imagini sunt publicate în GHCR. Nu se reconstruiește nimic.
legarea rulării CI · observare
apps/apiobservație: rulare · citirea publicăriirailshot-deploy.ymlO publicare contează doar când run id, source commit, ținta și aplicația corespund înregistrării acceptate.
legarea rulării CI · observare
apps/apieșec · rezultat necunoscut: failed · publication_unverifiedstarea operației · legarea rulăriiapi/product-store.jsUn eșec CI sau o publicare neverificată este înregistrată cu diagnostic și nu este transmisă către CD.
Aplicare → verificare publică
Aplică prin config Git și Argo CD doar când publicarea corespunde țintei înregistrate și înregistrează succesul doar după ce adresa HTTPS publică înregistrată este confirmată.
versiune · publicare în GHCR · legare
railshot-deploy.ymldate: images.json · spec · verdict · manifestcd.js · deployPublishedapps/apiCD citește fișierele înregistrării de publicare printr-un loader de încredere. CI nu creează el însuși nicio resursă de cluster, URL sau succes de implementare.
cd.js · deployPublished
apps/apirulare · aplicare: aplicare · țintă înregistratăconfigurație de încredere · țintă înregistratăgitops/bridge.pyRulează gitops/bridge.py cu configurația de încredere doar când aplicația și tenantul înregistrate corespund înregistrării de publicare.
commit · push · recitire de pe remote
gitops/bridge.pydate: workload commit · pushDepozitul config GitFace commit doar pentru workload.json la calea înregistrată a unei ramuri dedicate, înregistrează mai întâi intenția de push, face push și recitește revizia de pe remote. Un push incert nu este repetat.
Depozitul config Gitdate: revisionApplication · verificare AppProject
Argo CDRevizia depozitului de configurație spre care indică Application din Argo CD.
sincronizare Argo · observare
gitops/bridge.pyrulare · aplicare: sincronizare · observareApplication · verificare AppProjectArgo CDCere o sincronizare după verificarea AppProject; la observare doar citește, fără sincronizare.
Application · verificare AppProject
Argo CDrulare · aplicare: aplicareworkload · ServiceClusterul de aplicații K3sAplică sarcina de lucru pe clusterul țintă înregistrat.
workload · Service
Clusterul de aplicații K3sdate: pull de imagine · digestGHCRDescarcă digest-ul publicat. Un GHCR privat necesită o credențială de pull dedicată.
sondă HTTPS publică
gitops/bridge.pyobservație: HTTPS healthURL HTTPS publicVerifică doar adresa HTTPS de health înregistrată de operator, fără redirecționări, pentru 200 (și JSON-ul așteptat, dacă este setat).
URL HTTPS publicdate: cale publicăworkload · Service
Clusterul de aplicații K3sCalea publică (LB, NodePort, certificat) diferă în funcție de furnizor și de ținta înregistrată.
cd.js · deployPublished
apps/apidate: succeeded · revision · URLstarea operației · legarea rulăriiapi/product-store.jsEste înregistrat ca succeeded doar cu cd.deployed, o revizie, o verificare HTTPS publică reușită, momentul ei și un URL valid.
cd.js · deployPublished
apps/apieșec · rezultat necunoscut: unknown · necesită reconcilierestarea operației · legarea rulăriiapi/product-store.jsUn rezultat care nu poate fi cunoscut rămâne unknown; aceeași aplicare nu este nici retrimisă, nici anulată.
Observație · nu verdictul
Metricile și sondele nu decid succesul implementării. Valorile lipsă, învechite și eșuate sunt afișate ca atare.
metrics observer
apps/apiobservație: interogare PromQLPrometheusCitește seriile up, probe_success și Pod. Valorile lipsă, învechite sau eșuate sunt afișate în acea stare și nu sunt transformate niciodată în 0.
Prometheusobservație: scrape · probeworkload · Service
Clusterul de aplicații K3sScrape de exporter și sondă HTTP. Aceste metrici nu sunt folosite pentru a decide succesul implementării.
starea operației · legarea rulării
api/product-store.jsobservație: starea implementării · istoricinterfață web · istoric · Insightsapps/dashboardInterfața web și instrumentele MCP citesc aceleași înregistrări ale operațiilor. Ultima încercare și implementarea verificată curentă sunt afișate separat, iar o sarcină AI încheiată nu înseamnă o implementare reușită.
sondă HTTPS publică
gitops/bridge.pyobservație: HTTPS healthURL HTTPS publicVerifică doar adresa HTTPS de health înregistrată de operator, fără redirecționări, pentru 200 (și JSON-ul așteptat, dacă este setat).
Fiecare conexiune cu aceeași grosime. Alegeți un flux pentru a evidenția doar traseul lui, cu pași numerotați.
- Continuă · direcția în care circulă sursa, imaginile și cererile
- Întreruptă · cerere de rulare, aplicare sau sincronizare
- Linie-punct lungă · citiri de stare, sonde și metrici, separate de verdict
- Liniuță scurtă · un eșec înregistrat sau un rezultat necunoscut
- Linie neagră groasă · fluxul selectat; numerele dau ordinea
- Casetă · o graniță cu proprietar, cu calea sursei în antet
- Etichetă interioară · o componentă din acea graniță
- Casetă întreruptă · în afara platformei
- Contur portocaliu · locul în care decide un model
- API-ul produsului
- Înregistrările implementărilor
- Granița de execuție CD
- Intrare · CI · țintă
Imaginea din 2 octombrie (bc61a5a) din docs/architecture/README.md este istoric de implementare; această arhitectură urmează codul 645e28a. Furnizorii și căile de rețea diferă în funcție de ținta înregistrată, iar asta nu înseamnă că fiecare furnizor este mereu activ.