# AUR0227

## Error Message

`AUR0227: Side-effect detected in computed getter '{{getter}}': mutation during evaluation caused self-dirtying. This can lead to infinite recursion. Use non-mutating operations (e.g., spread syntax) or move side effects outside the getter.`

Where `{{getter}}` is the computed getter name (for example `get total`).

## Description

This error occurs when a computed getter (a getter tracked by Aurelia’s observation system) mutates state while it is being evaluated. Mutations during evaluation can “self-dirty” the computed observer and cause repeated re-evaluation (potentially an infinite loop).

## Example Trigger

```ts
export class MyVm {
  items = ['b', 'a'];

  // ❌ Mutates state during evaluation (Array.prototype.sort is in-place)
  get sortedItems() {
    return this.items.sort();
  }
}
```

## Correct Usage

Make computed getters pure (no side effects / no mutation). Use non-mutating operations or compute elsewhere.

```ts
export class MyVm {
  items = ['b', 'a'];

  // ✅ Non-mutating
  get sortedItems() {
    return [...this.items].sort();
  }
}
```

## Troubleshooting

* Identify the computed getter from `{{getter}}` in the message.
* Look for in-place mutations inside the getter (for example `sort`, `reverse`, `push`, `splice`, `++`, assignments).
* Move side effects to explicit actions (methods/event handlers) or effects/watchers, and keep the getter as a pure derivation.
