RAILSHOT.
Tilbake til salen

Railshot

AI deployment & operations platform

Rull ut en lokalt bygget nettapp til forberedte sky- og on-premises-miljøer, og drift den deretter.

En AI-plattform for utrulling og drift som tar en lokalt bygget nettapp til forberedte sky- eller on-premises-miljøer og holder den i gang.

28. september 2026 til 4. oktober 2026 · Avsluttet

Teamprosjekt · min del: planlegging og implementering av CI, CSP-klynger og Ansible-grensesnitt, drift, kodegjennomgang og integrasjon i teamet

SoftBank Hackathon 2026 powered by KOREC & ProgateDeltaker i innledende runde · uttak til finalen kunngjøres 26. oktober 2026 (per 7. oktober 2026)

  • NettImplementert · hackathon
  • MCP-serverImplementert · ekstern · lokal

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

Nettskjermen og brukerens egen agent ber om utrulling via samme produkt-API.

Produktet fra en akseptert utrullingsforespørsel gjennom CI-kontroller og publisering av image til Git-konfigurasjon og Argo CD-utrulling på et registrert mål og verifisering av offentlig HTTPS. Suksess registreres bare med både en anvendt revisjon og en offentlig kontroll; et utfall som ikke kan fastslås, forblir unknown.

Når et prosjekt sendes inn fra nettskjermen eller fra en AI-agent koblet til via MCP, gjennomføres klargjøring av utrullingsfiler, reparasjon av feil, publisering av image, utrulling i miljøet og verifisering av den offentlige URL-en; etter utrullingen viser samme skjerm historikk og logger og håndterer oppdateringer, stopp, gjenopptakelser og sletting. Et teamprosjekt.

Konkurransens utviklingsperiode 28. september 2026 til 4. oktober 2026

Nettskjermen og MCP-serveren som ble bygget under hackathonet. Ekstern MCP logger inn med OAuth for å sende inn; lokale mapper sendes inn via den lokale MCP-en.

Produktarkitektur · tegnet ut fra kodestiene ved offentlig commit 645e28a
Railshots produktarkitekturKomponenter og forbindelser i Railshot-produktet. Nettskjermen, den eksterne OAuth-MCP-en og en lokal MCP på brukerens datamaskin ber om utrulling via samme produkt-API, som registrerer en kilde-commit og en CI-kjøring. CI avgjør ut fra faste kontroller og publiserer de kontrollerte imagene til GHCR. CD-adapteren tar i bruk via config-Git og Argo CD bare når det registrerte målet samsvarer med publiseringsloggen, kontrollerer deretter den registrerte offentlige HTTPS-adressen og registrerer utfallet. Metrikker er observasjon, atskilt fra dommen.Nettleserbrukermappe · ZIP · GitHub-URLMCP-klientChatGPT · Codex · Clauderailshot-local MCPbrukerens datamaskin · stdioGHCRimages via digestAI SDK providerCodex · Claude SDKConfig-Git-reporegistrert workload.jsonOffentlig HTTPS-URLregistrert health-stiPrometheusdriftens kontroll-VM · lesapps/dashboardnettskjerm · historikk · Insightsagent/remote-mcp.jsOAuth MCP · deploy_repositoryapps/apivalider · mål · aksept med 202utrullingskø · 3 om gangenbinding av CI-kjøring · observercd.js · deployPublishedmetrics observerapi/product-store.jsoperasjonstilstand · kjøringsbindinggitops/bridge.pyklarert config · registrert målcommit · push · ekstern tilbakelesingArgo sync · observeroffentlig HTTPS-probeArgo CDApplication · AppProject-kontrollapps/<tenant>/<app>kilde-commit · trailersrailshot-deploy.ymlløkke · basiskontroller L0–L3SDK-reparasjon · bare feil som kan rettessamme kontroller → testet bundlerelease · publisering til GHCR · bindingK3s-appklyngeworkload · ServiceRailshot-plattformdriftsklynge · AWSGitHubprivat apps-repo · ActionsRegistrert måloffentlig sti per provider1 mappe · ZIP · GitHub-URL · Nettleserbruker → nettskjerm · historikk · Insights12samme produkt-API · /api/v13 OAuth · deploy_repository · MCP-klient → OAuth MCP · deploy_repository34samme produkt-API5 ZIP-opplasting · deploy_local_project · railshot-local MCP → valider · mål · aksept med 20256 registrert som queued · 202 · valider · mål · aksept med 202 → operasjonstilstand · kjøringsbinding67 køordning · operasjonstilstand · kjøringsbinding → utrullingskø · 3 om gangen78utrullingstilstand · historikk1source commit2workflow_dispatch3innsendt commit4forespørsel om reparasjon · betinget5publiser kontrollerte images6kjøring · lesing av publisering7 failed · publication_unverified · binding av CI-kjøring · observer → operasjonstilstand · kjøringsbinding71images.json · spec · verdict · manifest2apply · registrert mål3workload commit · push4revision5sync · observer6ta i bruk7image-pull · digest8HTTPS health9 offentlig sti · Offentlig HTTPS-URL → workload · Service910 succeeded · revision · URL · cd.js · deployPublished → operasjonstilstand · kjøringsbinding1011 unknown · krever avstemming · cd.js · deployPublished → operasjonstilstand · kjøringsbinding111PromQL-spørring2scrape · probe3utrullingstilstand · historikk4HTTPS health

Send inn → aksept

Nettskjermen, den eksterne MCP-en og den lokale MCP-en kaller samme produkt-API, som registrerer en kontrollert forespørsel som queued og svarer 202.

  1. Nettleserbrukerdata: mappe · ZIP · GitHub-URLnettskjerm · historikk · Insightsapps/dashboard

    Kilden og et registrert miljø velges på nettskjermen.

  2. nettskjerm · historikk · Insightsapps/dashboarddata: samme produkt-API · /api/v1valider · mål · aksept med 202apps/api

    Nettskjermen kaller produkt-API-et fra samme opprinnelse.

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

    Den eksterne MCP-en kobler til via OAuth og tar et offentlig GitHub-repository som input.

  4. OAuth MCP · deploy_repositoryagent/remote-mcp.jsdata: samme produkt-APIvalider · mål · aksept med 202apps/api

    Den eksterne MCP-serveren kaller samme utrullings-API via sin interne API-klient.

  5. railshot-local MCPdata: ZIP-opplasting · deploy_local_projectvalider · mål · aksept med 202apps/api

    Stdio-MCP-en på brukerens datamaskin pakker en mappe som ZIP og laster den opp. Sesjonen deles ikke med den eksterne OAuth-sesjonen.

  6. valider · mål · aksept med 202apps/apidata: registrert som queued · 202operasjonstilstand · kjøringsbindingapi/product-store.js

    Input, registrert mål, kapasitet og idempotensnøkkel kontrolleres; operasjonen registreres som queued og besvares med 202. 202 betyr akseptert, ikke utrullet.

  7. operasjonstilstand · kjøringsbindingapi/product-store.jsdata: køordningutrullingskø · 3 om gangenapps/api

    Tas i den rekkefølgen de ble akseptert, innenfor grensen for samtidige utrullinger (3 som standard).

  8. operasjonstilstand · kjøringsbindingapi/product-store.jsobservasjon: utrullingstilstand · historikknettskjerm · historikk · Insightsapps/dashboard

    Nettskjermen og MCP-verktøyene leser de samme operasjonsloggene. Det siste forsøket og den gjeldende verifiserte utrullingen vises separat, og en fullført AI-oppgave er ikke en vellykket utrulling.

CI-kontroller → publisering av image

Fastlåst plattformkode kontrollerer den innsendte commiten, gir bare feil som kan rettes, til AI og publiserer bare images som har bestått de samme kontrollene på nytt.

  1. utrullingskø · 3 om gangenapps/apidata: source commitkilde-commit · trailersapps/<tenant>/<app>

    Den innsendte kilden blir en commit i det private apps-repositoryet (med trailerne Railshot-Request og Railshot-Target), og grenen oppdateres uten force.

  2. utrullingskø · 3 om gangenapps/apikjøre · ta i bruk: workflow_dispatchløkke · basiskontroller L0–L3railshot-deploy.yml

    Ber om en kjøring med tenant, app, source_commit og target_id. Hvis svaret går tapt, sendes den ikke på nytt; i stedet søkes det etter kjøringer for samme commit.

  3. kilde-commit · trailersapps/<tenant>/<app>data: innsendt commitløkke · basiskontroller L0–L3railshot-deploy.yml

    Bare den innsendte commiten og fastlåst plattformkode (PLATFORM_REF) sjekkes ut.

  4. SDK-reparasjon · bare feil som kan rettesrailshot-deploy.ymldata: forespørsel om reparasjon · betingetAI SDK provider

    Kalles bare for feilklasser som kan rettes, og stoppes når den samme feilen gjentar seg eller grensen for forsøk nås. Bestått eller ikke bestått avgjøres av kontrollene, ikke av LLM-en.

  5. release · publisering til GHCR · bindingrailshot-deploy.ymldata: publiser kontrollerte imagesGHCR

    Etter verifisering av bundelen som besto kontrollene, publiseres de samme imagene til GHCR. Ingenting bygges på nytt.

  6. binding av CI-kjøring · observerapps/apiobservasjon: kjøring · lesing av publiseringrailshot-deploy.yml

    En publisering teller bare når run id, source commit, target og app samsvarer med den aksepterte posten.

  7. binding av CI-kjøring · observerapps/apifeil · ukjent utfall: failed · publication_unverifiedoperasjonstilstand · kjøringsbindingapi/product-store.js

    En CI-feil eller en uverifisert publisering registreres med diagnostikk og sendes ikke videre til CD.

Ta i bruk → offentlig kontroll

Tar i bruk via config-Git og Argo CD bare når publiseringen samsvarer med det registrerte målet, og registrerer suksess først når den registrerte offentlige HTTPS-adressen er kontrollert.

  1. release · publisering til GHCR · bindingrailshot-deploy.ymldata: images.json · spec · verdict · manifestcd.js · deployPublishedapps/api

    CD leser filene i publiseringsloggen via en klarert loader. CI lager ikke selv noen klyngeressurs, URL eller vellykket utrulling.

  2. cd.js · deployPublishedapps/apikjøre · ta i bruk: apply · registrert målklarert config · registrert målgitops/bridge.py

    Kjører gitops/bridge.py med den klarerte configen bare når den registrerte appen og tenanten samsvarer med publiseringsloggen.

  3. commit · push · ekstern tilbakelesinggitops/bridge.pydata: workload commit · pushConfig-Git-repo

    Committer bare workload.json på den registrerte stien i en dedikert gren, registrerer først push-hensikten, pusher og leser den eksterne revisjonen tilbake. En usikker push gjentas ikke.

  4. Config-Git-repodata: revisionApplication · AppProject-kontrollArgo CD

    Revisjonen i config-repositoryet som Argo CD-Application peker på.

  5. Argo sync · observergitops/bridge.pykjøre · ta i bruk: sync · observerApplication · AppProject-kontrollArgo CD

    Ber om en sync etter kontroll av AppProject; observasjon leser bare, uten sync.

  6. Application · AppProject-kontrollArgo CDkjøre · ta i bruk: ta i brukworkload · ServiceK3s-appklynge

    Tar i bruk arbeidslasten på den registrerte målklyngen.

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

    Henter den publiserte digesten. En privat GHCR krever en dedikert pull-legitimasjon.

  8. offentlig HTTPS-probegitops/bridge.pyobservasjon: HTTPS healthOffentlig HTTPS-URL

    Kontrollerer bare HTTPS-health-adressen operatøren har registrert, uten omdirigeringer, for 200 (og forventet JSON hvis angitt).

  9. Offentlig HTTPS-URLdata: offentlig stiworkload · ServiceK3s-appklynge

    Den offentlige stien (LB, NodePort, sertifikat) varierer etter provider og registrert mål.

  10. cd.js · deployPublishedapps/apidata: succeeded · revision · URLoperasjonstilstand · kjøringsbindingapi/product-store.js

    Registreres som succeeded bare med cd.deployed, en revisjon, en vellykket offentlig HTTPS-kontroll, tidspunktet for den og en gyldig URL.

  11. cd.js · deployPublishedapps/apifeil · ukjent utfall: unknown · krever avstemmingoperasjonstilstand · kjøringsbindingapi/product-store.js

    Et utfall som ikke kan vites, forblir unknown; den samme applyen sendes verken på nytt eller rulles tilbake.

Observasjon · ikke dommen

Metrikker og prober avgjør ikke om utrullingen lyktes. Manglende, utdaterte og mislykkede verdier vises slik de er.

  1. metrics observerapps/apiobservasjon: PromQL-spørringPrometheus

    Leser seriene up, probe_success og Pod. Manglende, utdaterte eller mislykkede verdier vises i den tilstanden og gjøres aldri om til 0.

  2. Prometheusobservasjon: scrape · probeworkload · ServiceK3s-appklynge

    Exporter-scrape og HTTP-probe. Disse metrikkene brukes ikke til å avgjøre om utrullingen lyktes.

  3. operasjonstilstand · kjøringsbindingapi/product-store.jsobservasjon: utrullingstilstand · historikknettskjerm · historikk · Insightsapps/dashboard

    Nettskjermen og MCP-verktøyene leser de samme operasjonsloggene. Det siste forsøket og den gjeldende verifiserte utrullingen vises separat, og en fullført AI-oppgave er ikke en vellykket utrulling.

  4. offentlig HTTPS-probegitops/bridge.pyobservasjon: HTTPS healthOffentlig HTTPS-URL

    Kontrollerer bare HTTPS-health-adressen operatøren har registrert, uten omdirigeringer, for 200 (og forventet JSON hvis angitt).

Alle forbindelser med samme tykkelse. Velg en flyt for å fremheve bare dens vei, med nummererte steg.

  • Heltrukket · retningen kilde, images og forespørsler flyter
  • Stiplet · kjøreforespørsel, ta i bruk eller sync
  • Lang strek-prikk · statuslesinger, prober og metrikker, atskilt fra dommen
  • Kort strek · en registrert feil eller et ukjent utfall
  • Kraftig svart linje · den valgte flyten; tallene angir rekkefølgen
  • Boks · en eiende grense, kildestien i overskriften
  • Indre chip · en komponent innenfor grensen
  • Stiplet boks · utenfor plattformen
  • Oransje kontur · der en modell tar beslutninger
  • Produkt-API
  • Utrullingslogger
  • CD-utførelsesgrense
  • Inngang · CI · mål

Bildet fra 2. oktober (bc61a5a) i docs/architecture/README.md er implementeringshistorikk; denne arkitekturen følger koden ved 645e28a. Providers og nettverksstier varierer etter registrert mål, og det betyr ikke at alle providers alltid er slått på.