> 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/13/
>
> 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.


# Script and encoding at the edges

Five separate findings, each small, each the kind that costs a day when met unprepared.

## SMS

Ethiopic falls outside GSM-7, so messages encode as UCS-2 and the per-message limit drops from 160 to 70 characters, roughly doubling cost for any design that assumed 160. SMS was ruled out for now, email only, with the finding kept for whenever it is reconsidered.

## Fonts

Ethiopic webfonts are large and would dominate page weight for exactly the readers who can least afford it. The decision: ship no webfont, rely on the Android system stack, and confirm rendering, line height and wrapping on a real low-end handset with long reviewed labels, not glyph specimens. Device verification has not been done. This site follows the same rule; the Ethiopic you see here is your device's own font.

## Declared charsets lie

47 World Bank captures (9.4 percent of that corpus by the programme's count) carry bytes contradicting their declared UTF-8 charset. They were recorded as explicit failures rather than decoded with replacement characters, because a replacement-character decode would have made every byte span suspect.

## Canonicalization

Text is normalized to NFC and line endings to LF before hashing. That rule arrived after digests over git-held text failed to reproduce (14 of 19 claims failed; CRLF against LF every time) and `.gitattributes` had been amended five times, each time adding the path that had just broken.

## Page chrome in two scripts

Ethiopian Reporter Amharic pages failed normalization with a malformed body container. The repair excluded one exact chrome subtree, applied one narrow presentational rule and forbade any whole-page fallback. That review also withdrew the already-accepted English text because the same chrome was in it.

Evidence: `user-beadwork/briefs/BRIEF_ethiopia-site-delivery-tiers_2026-08-02.md` (SMS, fonts) · `ethiopia-program/corpora/world-bank-ethiopia/` (charset failures) · 2026-07-24 (bilingual pilot, both withdrawn, both repaired) · build report §4.13 · 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/13/
```

<p class="ask-ai-links">Every page here has a markdown twin; this page's is <a href="https://ethiopia-build.stoagen.com/problems/13/index.md">https://ethiopia-build.stoagen.com/problems/13/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 SMS and font findings are from a delivery-tiers brief about a site for Ethiopian readers; only those technical sections are drawn on here.
- 47 of 1,250 documents is 3.8 percent; the 9.4 percent figure is as recorded in the programme and counts against a different base (likely the text files). The page reports the figure as recorded with that caveat.
- SMS, precisely: GSM-7 is the 7-bit alphabet that gives 160 characters per message; any character outside it forces the whole message to UCS-2 (16-bit), which gives 70. Ethiopic is entirely outside GSM-7, so every Amharic message is a 70-character message, and a 160-character design costs at least three segments. This is why the goals page says reports from everyday Ethiopians arrive by email.
- Fonts, precisely: the brief's instruction is to ship no Ethiopic webfont and rely on the Android system stack (Noto Sans Ethiopic ships with Android), then verify on a real low-end handset with long reviewed labels. Glyph specimens are explicitly not a verification because they do not exercise line height, wrapping or mixed-script lines. This site follows the same rule; its Ethiopic font stack is `Noto Sans Ethiopic, Abyssinica SIL, Nyala, Kefa, Ebrima, sans-serif` and the device verification has not been done for this site either.
- Charsets, precisely: a capture whose HTTP or HTML declared `charset=utf-8` but whose bytes did not decode as UTF-8 was recorded as a failed capture with the bytes retained, not decoded with replacement. The reason is the byte-anchor join surface (problem 03): one U+FFFD shifts nothing in byte offsets but makes every span in the document unverifiable against its declared text.
- Canonicalization, precisely: NFC (composed form) then LF line endings, then hash. Ethiopic has few composition cases but the rule is applied uniformly because the failure that caused it was CRLF versus LF on git-held text (14 of 19 claim digests failed to reproduce), and `.gitattributes` had been patched five times path by path before the rule was made global. The lesson is to normalize at the hash boundary rather than trust the checkout.
- Chrome, precisely: the Reporter Amharic pages had an advertising subtree inside the article body container that broke the body-extraction rule. The repair excluded that one subtree by exact selector, added one narrow presentational rule, and forbade any whole-page fallback (a fallback that takes the whole page when extraction fails is how the predecessor corpus accepted chrome as text). The English pages were withdrawn too because the same subtree was in them, which is the "news is not a class" rule in action: one publisher, one connector, one fix for both languages.
- Related: 03 and 05 (byte handling), 04 (markup structure), 14 (the other deterministic-to-code problem), goals (email, not SMS).
- Source: build report §4.13; the delivery-tiers brief of 2026-08-02; the bilingual pilot of 2026-07-24.
