Kubernetes removes APIs. GitLab removes CI/CD features. OpenTelemetry renames your metrics. Insurixa catches every one in your code, manifests and pipelines, commits the fixes code can prove safe, lets GitLab Duo agents handle the rest, and ships each change through all nine DevSecOps stages, with no human in the loop.
27 jobs across all nine stages, an upgrade radar, a code quality gate, a reusable CI/CD component with its own image, three custom Duo flows, a custom agent with MCP, and 17 tests.
Production opens the issue, agents write or repair the change, nine stages ship it, monitor heals production, and governance audits and closes the issue.
For platform teams. It found three published Prometheus charts that fail to install and a GitLab pipeline the linter passes with an empty password.
Upstream's own data routes only judgement to agents. Safe fixes cost zero credits; all agent work this month, a six-case evaluation included, used 93 of 500 GitLab Credits.
A 4K video of the loop running end to end, a live playground that runs the real packs in your browser, this site, and a README with a three-minute judge path. Issues, merge requests and pipelines are public.
From production noticing a retired name, to agents writing and repairing merge requests, to self-healing production and an audit that closes the issue.
Each of these is a real example from our case studies. The old thing keeps working until an upgrade, or keeps "working" with the wrong meaning, and no test fails.
helm installpolicy/v1beta1 PodDisruptionBudget was removed in 1.25. Prometheus community charts published today still use it, so the install fails the day a team turns on a disruption budget.
$CI_BUILD_TOKEN was removed in 16.0. A pipeline that still logs in with it sends an empty password, and GitLab's own CI linter passes it without a warning.
db.client.connections.wait_time was renamed and moved from milliseconds to seconds. Dashboards on the new name go dark, or read values 1,000 times off.
Models write what they learned. We measured it for one ecosystem in the Semconv Drift benchmark: 17 AI models, graded in code against 26 releases of the OpenTelemetry spec.
models wrote retired names, 357 times. 83% of them had been retired for more than a year.
wrote names they had correctly replaced when asked directly. Knowing is not doing.
"fixed" a metric by converting its unit and keeping its retired name: broken both ways, while the diff looks like a fix.
So the fix cannot come from a model's memory either. Code decides what is retired, from each upstream project's own published data. Agents judge only what needs judgement. The pipeline and production prove the result.
Three things start Insurixa: something production emits, a developer's merge request, or a production regression. Code decides, Duo flows judge, and every fix ships through all nine stages.

| Stage | What runs | Where |
|---|---|---|
| Plan | A scheduled pipeline drives the live service, reads what it emits, and opens one issue when anything is retired. | semconv-watch |
| Create | The Insurixa upgrade flow writes the merge request. On any failing merge request, insurixa-safe-fix first commits what code can prove; the pipeline repair flow fixes what needs judgement. | .gitlab/duo/flows/ |
| Verify | Unit tests; the three packs through the insurixa CI/CD component; a telemetry contract that runs the service; kubeconform in strict mode against Kubernetes 1.33. | insurixa-*-scan, kubernetes-schema |
| Package | The service image and the gate image are pushed to the GitLab container registry. | build-image, gate-image |
| Secure | GitLab SAST and secret detection, on merge requests and on main. | GitLab templates |
| Release | A GitLab release that tells dashboard owners what stops being emitted, what replaces it, and which units changed. | release-notes |
| Configure | Environment config as code, applied to staging and production; deploy staging, validate it against what CI verified, then promote. | configure-*, deploy-* |
| Monitor | After every deploy and every 6 hours. On regression it restores the previous config or deploy and opens an incident for the incident flow. | monitor-production |
| Govern | insurixa-policy.yml is checked rule by rule; the audit is posted on the originating issue, which is then closed. | governance |
Every pack decides, per finding, whether a change is safe: one replacement, always applies, same meaning. Safe changes are committed by code at zero credit cost. Only changes of shape or meaning reach an agent, with the reason attached.
Turns an upgrade issue into a verified merge request that converts values when units change, and merges itself when every gate passes.
Reads the failing job logs and pushes a fix to the same branch. It may change only application code, Kubernetes manifests and flagged pipeline lines, and must keep every value.
After monitor has made production safe, finds the commit and line that caused a regression, explains why CI could not see it, and fixes the cause for good.
Answers "what replaced X, is it safe, and why did my pipeline fail" from the same data the gates decide with, quoting current upstream docs.
SKIP for events that are not its job, so triggers on every event cost a fraction of a credit| Retired | Why find-and-replace is wrong | What has to happen | Handled by |
|---|---|---|---|
batch/v1beta1 CronJob | It isn't: same object, new version | bump the apiVersion | code |
$CI_BUILD_REF_SLUG | It isn't: GitLab documents an identical replacement | $CI_COMMIT_REF_SLUG | code |
autoscaling/v2beta1 HPA | the target changed shape; the API server rejects the bumped object | move each target into target: {...} | agent |
CI_JOB_JWT_V2 | there is no drop-in variable | declare id_tokens: with an aud | agent |
db.client.connections.wait_time | the unit changed from ms to s | rename and divide values by 1000 | agent |
policy/v1beta1 PodSecurityPolicy | no successor exists | redesign with Pod Security Admission | person |
| Who | Runs | What it did | Result |
|---|---|---|---|
| Insurixa upgrade flow | runs 1, 7 | planned 7 retired names and caught a 1000x unit error (!1); chose which specific retry reasons a deploy job needs before GitLab 20.0 (!7) | merged itself #3 closed by audit |
| Pipeline repair flow | runs 2, 5, 6 | 4 fixes pushed to developers' branches: 4 names, a ms-to-s conversion, a Kubernetes field change, CI_JOB_JWT_V2 to id_tokens | all gates green every value kept |
| Incident response flow | run 3 | found the config commit and line, wrote !3; later called incident #6 a false positive | merged itself #5 closed by audit |
| Pipeline repair flow, evaluated | 6 real files | Argo CD, kubernetes/examples and go-redis files copied unchanged into !8 to !13: selectors that must match the pod template (one a trap), five CRDs to a structural v1 schema, ms to s, and a PodSecurityPolicy with no replacement | 6 / 6 graded by code; refused the one it should |
| insurixa-safe-fix (code) | run 4 | 3 safe fixes across Kubernetes and GitLab CI/CD on !4 | 0 credits no agent needed |
All agent work in October, including every SKIP guard on every pipeline and issue event: 93 of the workspace's 500 monthly GitLab Credits; the six-case evaluation took about 30 of them.
Each pack reads its upstream project's published removal data, pinned so every result is reproducible. Adding the next one, for Helm, Terraform or a language runtime, is a table and a few verdict rules.
From the Deprecated API Migration Guide. SAFE_BUMP SCHEMA_CHANGE NO_REPLACEMENT and STALE_FIELD for what a find-and-replace leaves behind. Skips Helm branches that only render the old API on clusters that still serve it.
From GitLab's own removals page, pinned to a commit. Checks every pipeline against the GitLab version it runs on: removed features fail, and removals still ahead warn a release early.
From 26 releases of the semantic conventions, with unit changes and span-kind rules. Proven in production by a telemetry contract that reads what the running service emits.
# one command runs all three packs; the CI/CD component runs them as gates $ python -m insurixa check . --gitlab "$CI_SERVER_VERSION" --kubernetes 1.33 Insurixa check OpenTelemetry names 0 retired 0 safe to rename Kubernetes 1.33 2 removed {'SAFE_BUMP': 2} GitLab CI 19.6 1 removed {'SAFE_RENAME': 1}
I played the developer and the teammate. Developers merge their own merge requests as usual; Insurixa's own merge requests merge themselves, and no Insurixa step waits for a person.



batch/v1beta1, a PDB on policy/v1beta1 and $CI_BUILD_REF_SLUG.insurixa-safe-fix committed them and said so on the merge request.manifests-.tgz: a removed variable is an empty string, not an error.
autoscaling/v2beta1 autoscaler on 75% CPU and 200Mi memory.
$CI_JOB_JWT_V2, removed in GitLab 17.0.id_tokens: with an audience on that job and read the new variable.
stuck_or_timeout_failure, which still works but GitLab removes in 20.0.

Every number is reproducible from the evidence in the repository. Full write-up in docs/case-studies.md.
The pgbouncer, sql and json exporters break on any supported Kubernetes once a disruption budget or autoscaling is turned on. Reproduced on a real 1.32 cluster. insurixa.k8s fix repaired two and they installed. It refused to auto-fix the third, where a plain version swap is rejected by the API server. Most other hits were version-guarded Helm branches or test data, and Insurixa says so.
8 use features GitLab already removed. 5 very active projects, Wireshark, Graphviz and Buildroot among them, use retry:when values removed in 20.0. gitlab-examples/kubernetes-deploy logs in with $CI_BUILD_TOKEN: the linter says valid, and the password is empty.
$ helm install pgb prometheus-community/prometheus-pgbouncer-exporter --set podDisruptionBudget.enabled=true Error: INSTALLATION FAILED: ... no matches for kind "PodDisruptionBudget" in version "policy/v1beta1" $ python -m insurixa.k8s fix charts/ --target 1.33 Safe apiVersion bumps applied: 2 $ helm install pgb ./prometheus-pgbouncer-exporter --set podDisruptionBudget.enabled=true STATUS: deployed
Today each upgrade, whether a Kubernetes version, a GitLab major release or a conventions bump, is a migration project someone schedules: read the guide, find every use, decide what is safe, edit, review, ship, watch production. Insurixa turns it into a background process that opens, fixes, ships and audits itself.
Findings arrive as issues and merge requests, already fixed wherever code can prove it.
Removals still ahead warn now, while the old feature still works.
Contracts, strict schema, nine stages, production monitoring and an audit on every issue.
Safe fixes cost nothing. Agent credits go only to changes of shape and meaning.
Example assumptions, not measurements. Change them to your own numbers; nothing here is a claim about any specific company.
Not counted: outages avoided, dashboards that silently went dark, and the upgrades teams postpone because they are expensive.
Add the gates to any GitLab pipeline, then enable the flows in AI › Flows with work-item and pipeline triggers. The component's image is built and self-tested by Insurixa's own pipeline before it is published.
include: - component: gitlab.com/gitlab-ai-hackathon/transcend-october-2026/43322398/showcase/insurixa@main inputs: paths: "src/" kubernetes_paths: "deploy/ charts/" # optional kubernetes_version: "1.33" # the GitLab CI/CD check reads $CI_SERVER_VERSION, no input needed
SAST and secret detection on every merge request. Every URL goes through one checked helper. Agents run in a sandbox and may only touch the files their flow allows. Google Cloud deploys are keyless: the pipeline's own OIDC token, exchanged through Workload Identity Federation.
insurixa-policy.yml is checked rule by rule on every merge request and main pipeline, and the audit is posted where the work started.
Insurixa started from an MIT project of mine, vignesh2027/attrition, which supplies the OpenTelemetry dataset. Everything else, from packs to flows to pipeline, is new for this hackathon.
Measured from the pipeline's own runner time with the SCI method. Code-first fixes cut it 16%, and SKIP guards cut irrelevant agent sessions by 75%. Method and limits
Yes, for everything Insurixa owns. Its own merge requests merge themselves when every gate passes, production heals itself, and governance closes the issue. In the demo runs I played the developer and the teammate, and developers merge their own merge requests as they normally would.
Because models confidently write retired names, as our benchmark shows. Code applies what upstream data proves safe, which costs nothing and cannot hallucinate. Agents handle only what needs judgement, and the pipeline proves their work.
Each flow may change only specific paths and is told never to edit tests, data, the decision code or the pipeline's jobs. Tests check a frozen legacy fixture, and the telemetry contract and strict schema check what really runs.
The agent sandbox has no network, so agents cannot install tools to run tests. They say so in their notes, and the pipeline does the proving, which is why the contract and schema checks exist.
The scanners read files, not rendered Helm output. The GitLab survey covers root pipeline files of one ranking of projects on one day. The scanners know only what upstream has published, so a removal announced tomorrow is caught once its data is added to the pack.
Yes. Include the CI/CD component with one line and enable the three flows. Everything is MIT licensed.
Let code fix what it can prove, let agents handle the rest, and let GitLab prove it in production.