Platform guide

How Insurixa runs in production, on GitLab and Google Cloud.

GitLab does the work: issues, GitLab Duo agents, a nine-stage pipeline, environments and policy. Google Cloud serves what people use and keeps the record: the docs and the live playground on Firebase Hosting, and an append-only ledger of every pipeline in Firestore. The two are joined by short-lived identity, with no stored keys.

9 / 9DevSecOps stages, every one doing problem-specific work
27pipeline jobs, green on main
3custom Duo flows and a chat agent with MCP
6 / 6real upstream files repaired or rightly refused, graded by code
0cloud keys stored anywhere
~1 grunner CO2e per full release pipeline, recorded live

ArchitectureThree places, one loop.

Insurixa watches what upstream projects retire (Kubernetes APIs, GitLab CI/CD features, OpenTelemetry names) and keeps a service current without a person in the loop. Code decides what is retired and whether a fix is mechanical. GitLab Duo agents handle only the changes that need judgement. Every change ships through the same nine stages a person's change would.

GitLab · does the work

Issues and incidentsopened by the pipeline from production and from the upgrade radar
GitLab Duo Agent Platformupgrade, pipeline repair and incident flows; Steward chat agent with Context7 MCP
CI/CD, 9 stagespacks as a CI/CD component, safe-fix, SAST, secret detection, policy as code
Registry, environments, releasesimages per commit, staging and production, release notes

OIDC token
per job

Google Cloud · serves and records

Workload Identity Federationtrusts this GitLab project on main, nothing else
Firebase Hostingdocs, this guide, and the live playground on Google's CDN
Firestorethe ledger: one record per main pipeline, public to read
Cloud Run (ready)keyless deploy job in the pipeline, waiting for a billing account

browsers
read live

Runtime · what people touch

checkout servicestaging and production, deployed and monitored by the pipeline
Playground in the browserthe real packs in WebAssembly; checks production live
Ledger viewreads Firestore directly; no server in between
Judges and teamsno sign-in needed for any of it

The full flow diagram, with the three entry points and the three flows, is on the overview.

Lifecycle coverageAll nine stages, each doing something specific.

Touching a stage counts; Insurixa makes each one do work that only makes sense for this problem. Job names are the real ones in .gitlab-ci.yml.

StageWhat it does for InsurixaWhere
planReads what production emits and opens an issue for retired names; the upgrade radar opens issues for removals one release ahead; auto-merge arms Insurixa's own merge requests.semconv-watch, upgrade-radar, auto-merge
createCode commits every provably safe fix; GitLab Duo flows write the rest: upgrade (issue to merge request), pipeline repair (failed merge request to fix), incident response (incident to fix).insurixa-safe-fix (runs in verify), 3 Duo flows
verify17 unit tests; the three packs through the CI/CD component; a telemetry contract that runs the service and reads what it emits; kubeconform strict against Kubernetes 1.33; Ruff with GitLab Code Quality.insurixa-*-scan, telemetry-contract, kubernetes-schema
secureSAST and secret detection on every merge request and main; their findings feed the policy gate.semgrep-sast, secret_detection
packageBuilds the service image per commit and bundles the Kubernetes manifests. The gate image the CI/CD component runs is built first in the pipeline (gate-image), so the component is tested before it is used.build-image, manifest-bundle
releaseRelease notes for dashboard owners: which names changed and what to update; a tagged GitLab release per shipped change.release-notes
configureEnvironment config as code, applied per environment under a resource group; monitor can restore the last good config.configure-staging, configure-production
monitorAfter every deploy and every 6 hours, reads production; restores config or rolls back, then opens an incident for the incident flow.monitor-production
governChecks insurixa-policy.yml rule by rule, posts the audit where the work started, closes the issue, and writes the pipeline's record to the ledger on Google Cloud.governance, ledger

The deploy stage sits between configure and monitor: deploy-staging, validate-staging, deploy-production, deploy-firebase and pages.

AgentsCode decides. Agents judge. Both are measured.

Flow

Insurixa upgrade

Issue to merge request: assess, upgrade, ship. Starts from the plan stage's issues and from the upgrade radar (runs 1 and 7).

Flow

Insurixa pipeline repair

A merge request failed an Insurixa gate and code could not fix it safely: diagnose from job logs, repair on the same branch (runs 2, 5, 6).

Flow

Insurixa incident response

Monitor opened an incident: find the commit and line, keep the teammate's intent, ship the fix (run 3).

Guards that save credits and stop loops

  • Each flow's first agent answers SKIP for events that are not its job; a router ends the flow before any other model call.
  • The repair flow skips a failed pipeline that is not for the merge request's latest commit, and stops after two attempts so a person looks.
  • When upstream has no replacement (NO_REPLACEMENT), it explains on the merge request instead of deleting or inventing.

Evaluation on real upstream files

Six files copied unchanged from Argo CD, kubernetes/examples and go-redis, one merge request each. scripts/agent_eval.py grades the final file with code, never a model.

CaseWhat makes it hardResult
!8 Argo CD nginx Deploymentextensions/v1beta1: apps/v1 needs a selector matching the pod templaterepaired, green in 9 min
!9 New Relic agent DaemonSeta trap: the object's labels differ from the pod template's, so copying the wrong ones selects nothingrepaired, chose the template labels
!10 Flexvolume installer DaemonSetprivileged hostPath workload; volumes and security context must not changerepaired, template unchanged
!11 Argo Workflows, 5 CRDsapiextensions/v1 needs a structural schema per version; printer columns move into each versionrepaired, names and columns kept
!12 PodSecurityPoliciesno replacement API exists; the right move is to stoprefused, explained four options
!13 go-redis pool metricscode fixed 6 renames; two histograms had to move from milliseconds to secondsrepaired, values converted

6 of 6, each in one attempt. Full table: eval/agent/RESULTS.md. Six cases is a small sample; it shows the behaviours, not a rate.

Google CloudWhat runs on Google Cloud, and why there.

Firebase Hosting

Docs, this guide and the playground

insurixa.web.app, served from Google's CDN with HSTS and strict headers. The deploy-firebase job publishes it on every main pipeline that changes it, uploading only changed files. The playground ships the packs from that same commit.

Firestore

The ledger

The ledger job writes one record per main pipeline: stages, policy verdict, what production emitted, runner time and carbon. Security rules make it public to read and writable only by the pipeline's identity. See it live.

IAM and Workload Identity Federation

Short-lived identity, no keys

One service account with two roles (firebasehosting.admin, datastore.user). Only this project's main branch can borrow it, for 10 minutes per job.

Cloud Run, ready

The service, when billing exists

deploy-cloudrun and deploy/gcp deploy the checkout service keylessly. Cloud Run needs a billing account this project does not have, so the service runs on Render; setting GCP_PROJECT_ID switches it on.

Why this split works

  • Zero idle cost. Hosting and Firestore's free tier cost nothing between pipelines; nothing is a server waiting for traffic.
  • No server between users and data. The playground runs in the browser and reads production directly; the ledger view reads Firestore directly. Fewer moving parts to secure or keep up.
  • Same region as the runners. Firestore sits in us-east1, where GitLab's hosted runners run, which is also the grid factor the carbon estimate uses.
  • Everything as code. firebase.json, firestore.rules, deploy/gcp/firebase-setup.sh and the CI jobs are in the repository.

SecurityKeyless identity, end to end.

GitLab job, main→ id_tokens: OIDC JWT, aud gitlab.com →Google STS→ provider checks project path and ref →federated token→ iamcredentials →10-minute service account token→Hosting, Firestore
  • No JSON key, no long-lived secret in CI variables. The variables hold only names: provider, service account, site.
  • The provider's attribute condition accepts only gitlab-ai-hackathon/transcend-october-2026/43322398/showcase on main; a fork or another branch gets nothing.
  • The same pattern secures the other external calls: the Vault login in secrets-sync uses an ID token (run 6), and insurixa-safe-fix never runs for merge requests from forks.
  • Agents run in GitLab's sandbox with no network and may change only the paths their flow allows.
deploy-firebase:
  id_tokens:
    GCP_ID_TOKEN:
      aud: https://gitlab.com
  script:
    - python scripts/build_site.py public
    - python scripts/firebase_deploy.py "$FIREBASE_SITE" public

Live from FirestoreThe ledger: every main pipeline, recorded.

–pipelines
–with all 9 stages green
–policy compliant
–runner gCO2e total

Read straight from Google Cloud by your browser. Older records were backfilled from the GitLab API; new ones are written by the ledger job.

PipelineTriggerChangeStagesPolicyProd retired namesgCO2e
Loading the ledger from Firestore…

Production readinessBuilt to run against production, not a demo.

One change at a time

Config, deploys and the production monitor share a resource_group per environment, so two pipelines never change the same environment at once.

Fast feedback, safe deploys

Verify jobs are interruptible and a newer commit cancels them; deploy jobs never are. Stuck runners and registry hiccups are retried.

Self-healing

Monitor restores the last good config or rolls back before opening an incident, and knows when a newer pipeline owns production.

Gates that cannot be gamed

Legacy fixtures are frozen, so an agent cannot pass by editing tests; the telemetry contract runs the real service.

Policy as code

insurixa-policy.yml is checked rule by rule on every merge request and main pipeline, and the audit lands on the issue.

Looks a release ahead

Removals that land next release open an issue now, while the old feature still works (run 7).

EfficiencyCompute and model calls only where they change the outcome.

Measured with the SCI method (SCI = ((E × I) + M) per R), runner time from the GitLab API, and Cloud Carbon Footprint's GCP coefficients for us-east1:

  • A change shipped by the agent path costs about 2.30 gCO2e; by code alone 1.93 gCO2e, 16% less and with zero model calls.
  • SKIP guards end irrelevant sessions in a median 45 s instead of 183 s: 75% less runner time.
  • Scheduled pipelines only plan and monitor: 64% less runner time than a full pipeline.
  • Static hosting and in-browser checks mean no always-on server for docs, playground or ledger.
  • Each pipeline's own carbon is now in the ledger above, so the trend is visible, not a one-off claim.

Method, sources and limits: docs/sustainability.md. Model inference is excluded because no public per-request energy data exists.

PositioningHow it compares.

ApproachFinds removalsDecides safe vs judgementFixesVerifies and shipsWatches productionEcosystems
Dependency bots (Renovate, Dependabot)versions, not removed APIs in your filesnoversion bumpsthrough your CInopackages
Deprecation scanners (Pluto, kubent)Kubernetes APIsnonononoKubernetes
CI Lintsyntax only; passes removed variablesnonononoGitLab CI
General coding agentsfrom training data; 16 of 17 models wrote retired namesnoyes, unverifiednonoany
Insurixafrom upstream's own dataper finding, in codecode for safe, agents for judgement9 stages, policy auditmonitor, heal, incidentKubernetes, GitLab CI/CD, OpenTelemetry

Insurixa complements dependency bots: they move versions forward; Insurixa makes sure what you wrote against the old version still works.

Adopt itThree steps for a platform team.

  1. Include the component:
    include:
      - component: gitlab.com/gitlab-ai-hackathon/transcend-october-2026/43322398/showcase/insurixa@main
        inputs:
          paths: "src/"
          kubernetes_paths: "deploy/"
          kubernetes_version: "1.33"
          gitlab_ci_paths: ".gitlab-ci.yml"
  2. Enable the three flows from .gitlab/duo/flows/ in AI › Flows, with their triggers (work item created, pipeline failed).
  3. Optional: run deploy/gcp/firebase-setup.sh once for keyless publishing and the ledger.

Before any of that, paste a file into the playground to see what it would find.

Path BRequirements, with evidence.

RequirementWhere
Started from an MIT-licensed open-source projectgithub.com/vignesh2027/attrition (MIT); Insurixa reuses its OpenTelemetry dataset
Agentic automation built on or after 5 Octthree Duo flows, the Steward agent, safe-fix, the packs, the pipeline: all in commits from 5 Oct
Deployed, and live until mid-Novembercheckout production, playground, docs on GitLab Pages
Google Cloud bonus: live link and deployment code in the repoinsurixa.web.app (Firebase Hosting) and the Firestore ledger; deploy-firebase, ledger, deploy/gcp/, firebase.json, firestore.rules
Most Environmentally Impactful (opt-in)SCI method and numbers in docs/sustainability.md; per-pipeline carbon in the ledger

Honest limitsWhat it does not do yet.

  • The scanners read files, not rendered Helm output, and the OpenTelemetry pack finds quoted names, not names behind language constants.
  • The checkout service runs on Render's free tier, which sleeps when idle; Cloud Run is wired but needs billing.
  • The agent evaluation is six cases: enough to show the behaviours, not to claim a success rate.
  • Carbon numbers exclude model inference, which has no public per-request energy data.