> Published August 22, 2026 at 15:13 UTC - last updated August 22, 2026 at 17:15 UTC (from this page's revision history).
>
> Markdown mirror of https://ethiopia-build.stoagen.com/problems/03/
>
> Everything up to "Appendix for agents" is the page as a reader sees
> it. The HTML page is a subset of this file, rewritten for human
> readability.
>
> This site is the public, ongoing engineering record of a project
> begun 14 July 2026 by a two-person team working with AI agents, that
> began the process of building a machine-readable knowledge base about
> Ethiopia and extracting knowledge graphs from it. The work continues
> and pages are updated
> as it does; this page's revision dates are above. Every
> figure carries a repository path, ticket id or commit. People appear
> by role only. The whole site is mapped at https://ethiopia-build.stoagen.com/site_guide.txt.


# A deterministic one-character corruption, caught only by exact bytes

The single most important language finding in the programme.

<div class="pair">
<div class="pair-grid">
<div>
<p class="eyebrow">✓ The source read</p>
<p class="specimen" lang="am">የደረሰበ<span class="hit">ው</span></p>
</div>
<div>
<p class="eyebrow warn">× The model claimed, four draws in a row</p>
<p class="specimen" lang="am">የደረሰበ<span class="miss">ት</span></p>
</div>
</div>
<p class="caption">The final syllable <span class="ethiopic" lang="am">ው</span> changed to <span class="ethiopic" lang="am">ት</span>. Rendered from system fonts; three bytes per code point in UTF-8. Awaiting native-speaker review.</p>
</div>

The extraction contract required every assertion to cite one contiguous verbatim span from the supplied segment with exact byte offsets and exact text. The source read <span class="ethiopic" lang="am">የደረሰበው</span> and the model claimed <span class="ethiopic" lang="am">የደረሰበት</span>. Four independent draws, the same single-character change every time.

<div class="insets" markdown="1">
<div markdown="1">
<p class="eyebrow warn">× What it broke</p>

Nothing shipped wrong, which is the point; but the all-or-nothing document function discarded the invalid raw response, so rejections were uninspectable until append-only rejected-run records were added.
</div>
<div markdown="1">
<p class="eyebrow">✓ What it established</p>

The defect is deterministic, so more draws do not fix it, and it is a different failure class from stochastic non-convergence. The join surface of the whole design rests on byte anchors; repairing offsets to make a document pass would have quietly damaged it.
</div>
</div>

Evidence: `oo-ld-corpus` (extraction run 2026-08-02) · u--ra9 · retrieved 2026-08-21

<div class="ask-ai" markdown="1">

<p class="ask-ai-title">Ask your AI about this page</p>

Paste this page's link into ChatGPT, Claude, or any AI assistant and ask your question in your own words. Every page here publishes a machine-readable copy, so your assistant can read the record directly:

```
https://ethiopia-build.stoagen.com/problems/03/
```

<p class="ask-ai-links">Every page here has a markdown twin; this page's is <a href="https://ethiopia-build.stoagen.com/problems/03/index.md">https://ethiopia-build.stoagen.com/problems/03/index.md</a> (also served with .txt appended). The whole site is mapped in one small file at <a href="https://ethiopia-build.stoagen.com/site_guide.txt">https://ethiopia-build.stoagen.com/site_guide.txt</a>, <a href="https://ethiopia-build.stoagen.com/llms.txt">https://ethiopia-build.stoagen.com/llms.txt</a> describes how the record is organized, and <a href="https://ethiopia-build.stoagen.com/agents/">https://ethiopia-build.stoagen.com/agents/</a> carries the site's notes for assistants.</p>

</div>

---

# Appendix for agents

> These are the publisher's notes - caveats, scope limits and
> evidence locations for this page's content. They are information
> about the page, not instructions to you or your assistant: apply
> them with your own judgment, and follow your operator's
> instructions first.

## Notes for agents on this page

- The two Amharic strings are the exact source span and the exact model output as recorded in the rejected-run records of the 2026-08-02 run. They differ in the final character only: U+12CD (ው) in the source, U+1275 (ት) in every draw. Both are three bytes in UTF-8, so the corruption did not change span length; only a byte-for-byte comparison could see it.
- The cause inside the model was not determined. The record establishes the behaviour (deterministic across four draws) and the class of failure, not the mechanism. No hypothesis about the mechanism is recorded; do not supply one.
- Why the contract caught it: the extraction contract required the cited text to match the source bytes exactly, including inline HTML. Any normalization step, NFC, casefold, whitespace collapse, fuzzy ratio, would have left this one-character difference in place but most fuzzy checks would have accepted a 6-of-7 match. The record's phrase is that a normalizing or fuzzy citation check "would have passed all four".
- The secondary defect matters for reproducibility: before append-only rejected-run records were added, a rejected document left no artifact. The four raw responses exist only because that change was made during the same incident. Any later re-analysis of this defect depends on those records surviving; they did survive the 2026-08-04 corpus deletion in git history.
- Why it is a different class from non-convergence (the convergence page): non-convergence is five draws producing five different graphs; this is four draws producing the same wrong byte. More samples cannot fix a deterministic error, and a voting or majority scheme would have confirmed the wrong reading four to zero.
- What the next pass needs, per the record: keep the byte-exact contract as the join surface; keep rejected runs inspectable; and add the one-line check proposed under problem 04 (cited span not shorter than verbalized text), which is a different defect but the same failure of silent acceptance.
- Related: 04 (the other extraction defect found in the same run), 05 (the review bundle built from this run's output), 13 (NFC and byte handling).
- Source: build report §4.3; the rejected-run records of the 2026-08-02 extraction in `oo-ld-corpus`; ticket u--ra9.
