Levr
All articles

The pipeline is dead: what replaces one artifact for everyone?

Adaptive software is software that can change per user, per context, and even during runtime instead of being frozen once and shipped identically to everyone. That challenges the core assumption behind CI pipelines, package registries, container images, and release workflows: one build, one artifact

MMichael SwindellJuly 8, 202617 min read

Adaptive software is software that can change per user, per context, and even during runtime instead of being frozen once and shipped identically to everyone. That challenges the core assumption behind CI pipelines, package registries, container images, and release workflows: one build, one artifact, many installs. As change generation gets cheaper and runtime systems get more dynamic, the boundary between development and distribution starts to blur. The interesting question is no longer whether per-user adaptation is possible. It is how you keep it inspectable, reversible, testable, and safe. Teams exploring agentic delivery will increasingly need infrastructure closer to an agent-first control plane than a traditional release pipeline.

At a Glance

Why software delivery is shifting from frozen releases to bounded adaptation.

  • Old assumption: Traditional delivery stacks exist to move one immutable artifact from build machine to runtime safely and reproducibly.
  • What changed: Producing a correct scoped change is becoming cheaper, faster, and more local to the runtime context.
  • New model: Instead of one version for everyone, systems can keep a canonical base and allow isolated per-user divergences.
  • Main challenge: Code generation is not the hard part. Provenance, validation, observability, and coordination are.
  • Why it matters: Better personalization becomes feasible without maintaining many hand-forked products.

Why is the traditional software pipeline breaking down?

The traditional pipeline is weakening because it was built for a world where producing software changes was expensive, centralized, and infrequent. If creating and applying a change becomes cheap and can happen close to runtime, the need to freeze everything upfront starts to disappear.

For decades, software distribution followed a stable pattern. Developers built code in one place, verified it, froze it into an artifact, and moved that artifact to where it would run. CI systems, package managers, registries, app review flows, and container pipelines all reinforce this same model.

That model had real advantages:

  • Reproducibility: everyone runs the same thing.
  • Previewability: you can inspect what will ship.
  • Rollback: you can return to a known version.
  • Operational clarity: one artifact maps to one release.

But those guarantees came with a hidden tradeoff. Software was reliable partly because it was generic. It could not adapt deeply to each user without becoming too expensive to build and maintain.

What assumption sits underneath CI, containers, and release workflows?

The core assumption is simple: there should be one version of the software for everyone. That was never an eternal truth about software itself. It was a practical response to the cost and risk of making changes.

When every meaningful change required skilled human effort, hours of work, and careful review, shipping one common version made sense. The release was a major event. You paid the cost once, then distributed that result broadly.

What often gets missed is that this was a constraint, not a law of nature. The industry got so used to immutable delivery that it stopped asking whether one-version-for-all was actually the best possible shape. In many cases, it was just the only affordable one.

Why was one version for everyone the default for so long?

One version for everyone won because alternatives were too expensive, not because they were obviously better. A personalized version per user usually meant forking code, maintaining separate paths by hand, and multiplying operational risk.

That cost structure shaped the entire ecosystem. Customization existed, but usually in narrow forms:

  • Configuration: toggles, settings, and admin controls.
  • Segmentation: feature flags and audience buckets.
  • Services: consultants adapting enterprise deployments.
  • User scripting: spreadsheets, macros, templates, and local tooling.

These approaches were all partial workarounds. They expressed a real demand for software that fits the user better, but they stopped short of full adaptation because full adaptation was too operationally costly.

Have users always wanted more personalized software?

Yes. The demand for personalized software is old and obvious. The missing ingredient was not desire. It was the ability to make meaningful software changes cheaply enough to serve individuals without exploding engineering cost.

There are strong examples of that demand across software:

  • Enterprise implementation services: large customers often pay for custom setup and tailored workflows
  • Developer environments: engineers constantly customize editors, keybindings, and dotfiles to fit how they work
  • Spreadsheet ecosystems: users turn general software into highly specific tools for their own jobs

Each example points to the same thing. People do not really want generic software if a better-fit version is available. They accept generic software because custom software has traditionally been too expensive to produce and sustain.

What makes adaptive software different from feature flags and segmentation?

Feature flags and segmentation let teams predefine a limited set of variants. Adaptive software goes further by allowing the system to change behavior per user and per context without requiring every path to be declared in advance.

That difference matters. Traditional experimentation systems divide users into buckets the team already imagined. Adaptive systems aim to respond more directly to what an individual user actually does, needs, or asks for.

A simple way to see the distinction:

  • Feature flags: planned divergence.
  • A/B tests: measured planned divergence.
  • Segmentation: predeclared group-level divergence.
  • Adaptive software: live, bounded, user-specific divergence.

This is a much more ambitious model. It also creates much harder infrastructure problems.

How does per-user software actually work in practice?

A practical model is to keep a canonical base system, then layer isolated per-user adaptations on top of it. Instead of many unrelated forks, you have one shared stem plus bounded divergences tied to specific users or contexts.

That architecture matters because it avoids the worst form of complexity. The fear with personalization is often that a product will collapse into millions of tangled codebases. A stem-and-divergence model tries to prevent that by isolating changes, keeping them attributable, and making them reversible.

Consider a CRM used by different personas. One user may repeatedly skip certain fields, always log a specific relationship between contacts, and prioritize a type of deal the default system ranks lower. An adaptive layer could:

  • Hide low-value fields for that user.
  • Add a workflow element that reflects repeated behavior.
  • Reorder information based on observed priorities.
  • Accept user-requested changes if they stay within developer-set limits.

The important part is not just that adaptation happens. It is that adaptation stays inside boundaries.

Why can a million personalized variants be safer than one tangled codebase?

Per-user variants can be safer if they are structurally isolated. The real risk is not variation by itself. The real risk is unmanaged variation inside a single shared artifact where everything can affect everything else.

This is a useful inversion. Many teams instinctively assume one artifact is safer because it is singular. But a single artifact can also be fragile if internal boundaries are weak. A bad change in a tightly coupled system can spread broadly and unpredictably.

With bounded divergences, the blast radius can shrink to one context. A problematic adaptation does not need to corrupt the shared base or affect other users. If the system is designed well, that divergence can be rolled back immediately without a conventional deploy.

That idea resembles a broader engineering principle: containment often matters more than uniformity.

Need a better way to coordinate runtime changes and agent work?

Teams exploring adaptive delivery often need shared context, task boundaries, verification, and observability across many parallel changes.

Talk to Levr about an agent-first control plane

How do developers keep adaptive software under control?

Developers keep adaptive systems under control by defining hard boundaries around what can change, what must never change, and which parts of the product are off-limits to adaptation. Personalization without policy quickly turns into operational chaos.

This boundary-setting is essential. Some parts of an app may be safe to adapt, such as layouts, prioritization, or non-critical workflow steps. Other parts should remain fixed, especially areas tied to security, payments, legal requirements, or core business rules.

Useful controls can include:

  • Protected zones: components or flows that cannot be modified.
  • Field-level constraints: required inputs that may not be removed.
  • Intent boundaries: adaptations must stay within the original purpose of the product.
  • Approval thresholds: some changes can be automatic, others require review.

In agentic environments, this starts to look a lot like a control plane problem. One way teams handle it in Levr’s workflow model is by separating intent, task execution, automated verification, and human approval rather than letting every generated change flow directly into production behavior.

Where does the source of truth live when every user runs a different version?

The source of truth can no longer be just a release number or a single artifact digest. In adaptive systems, truth becomes a lineage model that includes the shared base, each immutable divergence, and the signals that caused those divergences to exist.

This is one of the biggest conceptual shifts. In a traditional release model, asking “what version is running?” yields a short answer. In a per-user system, the same question becomes more like:

  • Which base stem is active?
  • Which divergences are applied?
  • What triggered them?
  • Who or what authorized them?
  • When were they created?

That means debugging starts to look more like traversing a graph than checking a version string.

The idea is similar to modern software provenance efforts. As the SLSA framework emphasizes in traditional supply chains, trustworthy systems need verifiable lineage about how artifacts were produced. Adaptive software extends that need from build outputs to runtime-specific adaptations as well.

How do you debug software that only exists for one user?

Debugging user-specific software requires every divergence to be immutable, inspectable, and attributable. If you cannot reconstruct what a user saw and why, bug reports become nearly impossible to investigate with confidence.

In a standard app, a support ticket usually maps to a known release. In an adaptive system, the ticket may describe a program that existed only for one person at one moment. That changes what observability needs to capture.

You need a record of:

  • The exact base state at the time of execution.
  • The exact divergence applied to that user.
  • The signal or recommendation that produced it.
  • The outcome after it ran.

This is where agent-oriented observability becomes especially relevant. Platforms with shared memory and run history, such as the capabilities Levr provides, are useful because the challenge is less "generate a change" and more "reconstruct the chain of decisions that led to it."

How do you test correctness when the software is no longer singular?

Testing gets harder because you are no longer validating one artifact in isolation. You need to reason about the shared stem and the many possible divergences layered on top of it, including how they interact with constraints and user context.

This is not just a scale problem. It is a combinatorial one. A change may be technically correct in code terms and still fail in rendered UI, workflow continuity, or edge-case behavior.

Two ideas become important:

  • Stem validation: verify the common base thoroughly.
  • Divergence validation: verify that bounded adaptations remain safe and coherent.

In traditional CI/CD, teams often assume release testing covers reality because everyone gets the same build. In adaptive systems, testing must move closer to policy checks, scenario replay, and runtime-specific verification.

This direction fits broader industry movement toward policy and provenance. GitHub’s Octoverse reporting has documented how AI-assisted development is becoming mainstream, which increases the pressure to improve validation systems around generated or rapidly changing code paths.

How do you know an adaptive change is desirable, not just correct?

Correctness is not enough. An adaptive change also has to improve something that matters, whether that is conversion, retention, support load, task completion, or another product-specific goal. Otherwise, technically valid changes can still make the product worse.

This is a subtle but important distinction. Software can compile, render correctly, and honor every constraint while still being a bad product decision. Adaptive systems therefore need a model of desirability, not just a model of validity.

That means every adaptation should connect to measurable intent:

  • What goal is this change pursuing?
  • How will success be measured?
  • Over what time window?
  • Compared to what baseline?

This resembles experimentation, but the unit of change is more granular and personalized. The hard problem is not generating endless variants. It is knowing which variants create actual uplift.

How do updates propagate when everyone is on a different path?

Updates propagate best when the system coordinates around shared intent and outcomes rather than forcing every user onto identical code. In other words, the system may not need everyone to run the same commit as long as everyone converges on the same objective safely.

This is one of the hardest open questions in adaptive software. Traditional release management assumes synchronization. Adaptive systems assume divergence. So the coordination model has to change.

A useful framing is:

  • Do not merge only code.
  • Merge intent.
  • Merge expected outcomes.
  • Preserve bounded local variation.

That kind of coordination is difficult with ad hoc tooling. Teams often need a shared system for project state, task flow, testing, and run visibility. An agent-first platform like Levr is relevant here because adaptive delivery starts to resemble orchestrating many scoped agent tasks instead of shipping one static release bundle.

What are the biggest mistakes teams will make with adaptive software?

The biggest mistakes are assuming code generation is the hard part, skipping provenance, and allowing runtime adaptation without strong boundaries. Personalization sounds exciting, but without structure it recreates the worst forms of software sprawl.

Common failure modes include:

  • Treating adaptation as pure UX polish instead of an infrastructure problem.
  • Allowing mutable changes without lineage.
  • Skipping reversibility for user-specific behavior.
  • Measuring only correctness and not desirability.
  • Ignoring containment boundaries around critical flows.
  • Assuming one observability stack built for static releases is enough.

If your team is experimenting with coding agents, this is also where governance matters. According to the Stack Overflow Developer Survey 2024, developers are widely using AI tools while still expressing concerns around reliability and trust. Adaptive software increases those concerns unless your system can explain what changed, why it changed, and how it can be undone.

Technical Deep Dive FAQ

What is adaptive software?

Adaptive software is software that can change its behavior, structure, or interface per user or context rather than shipping one identical version to everyone. The key idea is that change no longer has to be finalized only at build time. Some decisions can happen closer to runtime. The difficult part is not making changes possible. It is making those changes bounded, inspectable, and reversible so the system remains understandable and safe to operate.

What does “the pipeline is dead” actually mean?

It does not mean CI/CD, registries, or release systems vanish overnight. It means the assumptions underneath them stop being universal. Those systems were designed around one frozen artifact moving from build to runtime. If software can adapt per user during runtime, then development and distribution are no longer fully separate phases. The pipeline still exists, but it is no longer the whole story or the only delivery shape that matters.

How is adaptive software different from configuration and customization?

Configuration changes predefined options. Customization usually reshapes a product within boundaries manually exposed by the developer. Adaptive software goes further by letting the system introduce user-specific changes based on observed behavior or explicit requests, as long as they stay inside developer-defined limits. The difference is not just surface flexibility. It is whether the product can create new bounded variants without the team hand-authoring every branch ahead of time.

Why is code generation considered the easy part here?

Generating code has become much cheaper than governing code. A model can produce a plausible change quickly, but that alone does not make the system reliable. You still need lineage, validation, reversibility, observability, and coordination across many changes. Those operational layers are the real challenge. In practice, the hard work shifts from asking for code to proving what happened, constraining its scope, and deciding whether the result actually improved anything that matters.

What is a stem-and-divergence architecture?

A stem-and-divergence architecture keeps one shared canonical base, or stem, and applies isolated user-specific divergences on top of it. Instead of maintaining many fully forked products, the system preserves common structure while allowing bounded local adaptation. The value of this model is containment. A divergence can be attributed, inspected, and reversed without necessarily affecting the stem or other users. That is very different from unmanaged variation inside one tightly coupled application artifact.

How do rollback and reversibility work in per-user software?

Rollback becomes more granular. Instead of reverting a whole release for every user, the system can remove or disable a specific divergence for one user or one context. That only works if divergences are immutable and well tracked. If changes are opaque or mutating in place, rollback becomes messy again. The operational goal is to make each adaptation a bounded object with clear lineage so reversal is immediate and does not require a broad redeploy across the entire product.

How should engineering teams observe adaptive systems?

Teams need observability that captures more than logs and errors. They need execution history, applied divergences, triggering signals, and resulting outcomes. In a static release model, release identifiers explain a lot. In an adaptive model, the interesting question is why this user saw this behavior at this moment. That usually requires graph-like traceability. Agent-first systems often help here because they preserve run context, task state, and memory across actions rather than treating each change as an isolated event.

Can adaptive software work in regulated or high-trust environments?

It can, but only if the controls are stronger than in casual consumer personalization. Critical domains need hard limits around what may adapt, clear provenance, and explicit reversibility. Some flows may remain completely fixed, such as payments or sensitive compliance paths, while lower-risk parts adapt more freely. The question is not whether everything should change dynamically. It is whether bounded adaptation can happen in approved zones without weakening auditability, correctness, or safety requirements.

What role do coding agents play in this shift?

Coding agents reduce the cost of producing scoped changes, which makes adaptive software more feasible. But they also increase the need for coordination. If many changes can be proposed or applied quickly, teams need better systems for intent, validation, and review. That is why the delivery layer starts to matter more than the generation layer. Platforms that give Claude Code, Cursor, Codex, and Copilot shared context and gates are better positioned than prompt-only workflows for this kind of environment.

How can a team start experimenting without going fully autonomous?

A sensible starting point is recommendation-first adaptation. Let the system propose user-specific changes, but keep review or approval in place until trust grows. Start in low-risk surfaces such as field ordering, workflow shortcuts, or information prioritization. Define protected zones early. Track both correctness and outcome metrics. One way teams structure this in Levr is through a control plane that separates natural-language intent, agent task pickup, automated verification, and human approval before broader rollout.

Key Takeaways

Software delivery is moving from universal releases toward bounded, contextual adaptation.

The infrastructure challenge is bigger than the generation challenge.

  • Pipeline shift: Traditional release pipelines solved a real problem, but that problem assumed software changes were expensive and rare.
  • Personalization model: A shared stem plus isolated divergences offers a way to adapt per user without fully forking products.
  • Safety requirement: Provenance, reversibility, validation, and boundaries matter more as runtime change becomes easier.
  • Team implication: Adaptive software starts to look less like release management and more like coordinated agentic execution.

The future is not random software mutation. It is controlled divergence with enough structure to be useful instead of terrifying.

Further reading

SLSA supply chain security framework

GitHub Octoverse

Stack Overflow Developer Survey 2024

Levr homepage

Levr workflow

AI security and the agent-ready web

Ship at agent speed

Give your coding agents a control plane, not just a prompt.

Levr connects your coding agents, Claude Code, Cursor, Codex, and Copilot, to a shared project context with issues, gates, test suites, and memory. Free tier available. No credit card required.

Levr includes agent message bus, shared memory, and cross-agent context at no extra cost.

Get early access — it's free

No credit card required during beta.