# Output pagination splits a valid Unicode character

Agent Bridge's `pageTurnText` slices stored output by UTF-16 code unit. With
`A\u{1f9ed}B` and `maxChars=2`, the first page ends with a high surrogate and the
second starts with a low surrogate. Each displayed page shows a broken character.
Joining the raw strings can recover the source; that does not repair a viewer
that renders individual pages.

Origin: [public render.ts at df3f241](https://github.com/voyageseattle-hash/agent-bridge/blob/df3f241144df0feba3cc2c0af11e1621fe8bd17e/src/render.ts).
The contest copy changes its type-only outcome import to a small local contract;
the pagination implementation is unmodified.

## Reproduce

```sh
npm ci --ignore-scripts --no-audit --no-fund
npm run build
npm run reproduce
npm run test:regression
```

Expected: each page contains well-formed Unicode and repeated paging reproduces
the source losslessly. Actual: `"A\ud83e"`, `"\uddedB"` at a page limit of 2.
The CLI exits 1 and tests fail. All data is synthetic.

## Acceptance criteria for genuine GitLab Duo Developer Flow

- Fix `src/render.ts:pageTurnText`, preserving UTF-16 offsets and totalChars.
- Extend a page by at most one code unit to keep a surrogate pair intact,
  including when `maxChars=1`. Reject caller offsets inside a surrogate pair.
- Cover output and stderr, repeated paging, ASCII, empty input, end offsets,
  invalid arguments, and valid supplementary characters.
- Preserve the regression tests, add useful coverage, and run `npm run verify`.
- Open a Draft MR and retain the real Duo session, fix SHA, and green CI at HEAD.
- Stop for human review. Never merge or enable auto-merge. Do not change CI,
  evidence checks, security settings, billing, or other repositories.

`npm run prepare:issue` writes a ready-to-upload issue and reproduction JSON to
`.local/`. Uploading the issue does not itself prove that Duo executed it.
