---
title: MARKLESS_PROJECTED_REPEAT_HOLE_REPEATED
description: "This list is projected into a hole that repeats: a Markless compiler error."
sidebar: { hidden: true }
search: { keywords: ["PROJECTED_REPEAT_HOLE_REPEATED","projected repeat hole repeated","markless error"] }
pagination: false
---

**Error** from the compiler, while it builds your `.tsrx` files.

## What happened

Markless prints the message, the reason, and a suggestion:

```text
MARKLESS_PROJECTED_REPEAT_HOLE_REPEATED: The @for over `<collectionSource>` is written inside <child>'s children, and <child> renders its `{children}` inside its own @for row, so the list would be painted once per row and has no single element to grow in.
A keyed repeat records one parent element: resume keys the served rows under it and inserts new rows into it. A hole inside a repeated row renders the projection once per row, so there is no one element the record could name, and the rows would silently never update.
Move the @for into a component of its own and render that component inside <child>'s row, or lift the list above <child>.
https://markless.dev/errors/MARKLESS_PROJECTED_REPEAT_HOLE_REPEATED
```

Words in angle brackets change from case to case.

## How to fix it

Start with the suggestion in the message above.

This page has no guide yet. [Help write it](/contributing/improve-these-docs).

## Where it comes from

`@markless/compiler` raises this code. Source:

- [packages/compiler/src/passes/semantic-graph/diagnostics.ts](https://github.com/compiled-run/markless/blob/main/packages/compiler/src/passes/semantic-graph/diagnostics.ts)

Read [how to read a Markless error](/tooling/diagnostics), or go back to [all error codes](/errors).
