# Batch 171 process log - Rule 129 material and landscape lexical expansion after Rule 128

Program: Kuku Yalanji synthetic parallel corpus for MobTranslate.
Batch label: `batch-171`.
Date opened: 2026-07-07.
Starting verified corpus: 8,597 / 20,000 verified sentences, 93,929 Kuku words, lint green, no under-review rows.
Target after close: 8,647 / 20,000 verified sentences.

## Operator intent

Batch 171 follows the lexical cadence after Rule 128. It admits no generator-authored rows and no phantom lexemes.
The 50 sentence pairs are hand-authored in the main loop after exact source readback.

The lexical focus is a small concrete material/landscape set:

- `birra` leaf, used only in the leaf sense, not lungs;
- `dumbul` bark/hard covering, used here as bark only;
- `kubu` smoke;
- `kulji` stone/rock, not mountain;
- `jukar` sand;
- `manjal` mountain;
- `madja` scrub/rainforest;
- `diburr` seed/egg, used here as seed only;
- `nganka` flower;
- `ngurrbal` fog.

The construction focus is deliberately conservative: rest/location rows, old object placement and transfer frames,
perception rows, sourced ask-about DAT topics, laugh-target rows, and the closed comitative set. No new instrument,
comitative, possessive, or abstract case pattern is inferred from the lexical heads.

## Source inventory checked before authoring

Primary grammar file: `/mnt/donto-data/workspace/mobtranslate.com/dictionaries/kuku_yalanji/grammar.md`.
Primary dictionary file: `/mnt/donto-data/workspace/mobtranslate.com/dictionaries/kuku_yalanji/dictionary.yaml`.
Corpus lexeme table: `synthetic.db.lexemes`.

Exact dictionary readback confirmed:

- `birra`: noun, leaf; also lungs, explicitly excluded for this batch.
- `dumbul`: noun, bark/hard covering such as tree bark, crust, or shell; bark sense selected here.
- `kubu`: noun, smoke.
- `kulji`: noun, pebbles/small stones; grammar also gives stone/rock but explicitly not mountain.
- `jukar`: noun, sand.
- `madja`: noun, scrub/jungle/rain forest.
- `manjal`: noun, mountain.
- `diburr`: noun, seed/egg/bullet/tablet; seed sense selected here.
- `nganka`: noun, flower/blossom.
- `ngurrbal`: noun, fog.

Grammar readback reinforced the relevant controls:

- `kulji`, `kulji-nga`, and the warning that `kulji` is stone/rock but not mountain;
- `manjal-muny` and `manjal-ba` mountain case forms;
- `jukar-iji` sandy and prior corpus `jukar-a`/sand rows, but no new `jukar-iji` row here;
- `nganka-kari`, `nganka-ji`, and prior flower rows;
- `birra-jirr-ka` in the tree-with-leaves example, but no new comitative is coined here;
- `kubu` in the source line for seeing smoke;
- `diburr` egg/seed examples, with the bullet extension excluded;
- retained source-backed frames from Rules 126-128 for `babaji-y`, `yajarri-l`, `nyaji-l`, `wundi-l`,
  `yijarri-l`, `bawa-l`, `wuna-y`, `dunga-y`, `kada-y`, `jana-y`, and `bunday`.

Corpus lexeme readback confirmed all ten target heads are already verified, along with the retained case forms
`bubu-ngu`, `wabarr-ba`, `balji-nga`, `baral-ba`, `bayan-ka`, `bayan-muny`, `juku-ngu`, `ngalkal-ba`,
`manjal-ba`, `madja-nga`, `bana-ka`, `bana-nga`, `kuku-ku`, `minya-ka`, `mayngku-ku`, `ngamu-ndu`,
`nganjan-anda`, `babi-nda`, `kami-nda`, `maral-anda`, `ngawa-nji`, `jawun-unji`, `nganjan-anji`,
`juku-ji`, and `kambi-ji`.

## Pre-bank duplicate scan

The final planned-surface scan checked 50 planned Kuku surfaces against every non-rejected row in `synthetic.db`.
Result: 50 planned rows, 50 unique within the batch, and zero exact cross-corpus duplicates.

## Static guard design

`bank_171.py` includes guards for:

- exactly 50 rows, sequence order, English punctuation, analysis separator, JSON fields, evidence, and confidence;
- frame names starting with `r129_`;
- no temporal-clitic construction markers in this lexical batch;
- no denied/out-of-scope tokens: `yah`, `ngawuya`, `walnga`, `maja-nga`, `yunga`, `bada-bada`,
  `wangkar-wangkar`, `biyul`, `warrur`;
- lexical sense guards for leaf/bark/smoke/stone/sand/mountain/scrub/seed/flower/fog;
- `birra` rows must gloss leaf, never lungs;
- `dumbul` rows must gloss bark or hard covering and use bark only in English;
- `kulji` rows must gloss stone/rock and cannot satisfy English mountain rows;
- no `kulji-bu`, no instrument analyses, and no new instrument/comitative/possessive analogy;
- `mayngku` and `wulman` loan/contact forms must be loan-logged when present;
- `babaji-y` askers must not be ERG-marked in the first token;
- `nyaji-l` common-noun perceivers must be ERG-marked; pronoun A rows are exempt;
- `yajarri-l` laugh rows must contain a sourced DAT:pt target suffix;
- comitatives must be limited to `ngawa-nji`, `jawun-unji`, `nganjan-anji`, `juku-ji`, and `kambi-ji`;
- exact duplicate Kuku surfaces are checked against all non-rejected rows before insertion.

## Planned row groups

- Rows 1-10: material/landscape rest, coming, standing, and motion rows.
- Rows 11-20: object placement, leaving, and transfer rows.
- Rows 21-30: perception rows for smoke, leaves, bark, stone, and mountain.
- Rows 31-35: sourced ask-about DAT topic maintenance rows.
- Rows 36-40: laugh-target DAT:pt maintenance rows.
- Rows 41-46: closed comitative motion/stay rows with retained places.
- Rows 47-50: additional perception rows for bark, seeds, flower, and fog.

## Pre-bank state

- `sqlite3 synthetic.db`: accepted 7,686; revised 911; under_review 0; verified total 8,597.
- `lint_corpus.py`: `lint: 8597 rows scanned, 0 issues flagged`.

## Banking, review, close, export, and docs

`python3 -m py_compile batch_scripts/bank_171.py batch_scripts/close_171.py` passed.

Pre-bank lint:

- `lint: 8597 rows scanned, 0 issues flagged`
- `GOAL METRIC: 8597 / 20000 verified sentences (93929 Kuku words)`

Bank command:

- `python3 batch_scripts/bank_171.py`
- Result: `banked batch-171: 50 rows under_review, avg_words=3.66, process_events=8`

Under-review lint:

- `lint: 8647 rows scanned, 0 issues flagged`
- `GOAL METRIC: 8597 / 20000 verified sentences (93929 Kuku words)`

Manual five-lens review:

- morphology: passed all 50 rows; checked retained LOC, ABL, DAT, LOC:pt/DAT:pt, COMIT, ERG, past, and nonpast
  forms with no new instrument/comitative/possessive analogy;
- lexicon: passed all 50 rows; checked `birra` leaf not lungs, `dumbul` bark only, `diburr` seed only, `kulji`
  stone/rock not mountain, `manjal` mountain, `madja` scrub, `jukar` sand, `kubu` smoke, `nganka` flower, and
  `ngurrbal` fog;
- syntax: passed all 50 rows; checked rest, coming, standing, placement, leaving, transfer, perception, ask-about,
  laugh-target, and closed-comitative frames;
- fidelity: passed all 50 rows; checked duplicate freedom, sense exclusions, `warrur` deferral, no `kulji-bu`,
  common-noun `nyaji-l` perceiver ERG, pronoun A bare, `babaji-y` askers not ERG-marked, and `yajarri-l` DAT:pt
  targets;
- register: passed all 50 rows; ordinary material, landscape, perception, motion, asking, laughing, and companion
  motion rows pending elder verification.

Close command:

- `python3 batch_scripts/close_171.py`
- Result: `closed batch-171: 50 accepted rows, 250 review passes, 20 lessons, 46 lexeme/source-log rows, 14 process events, under_review=0, verified corpus=8647`

Post-close lint:

- `lint: 8647 rows scanned, 0 issues flagged`
- `GOAL METRIC: 8647 / 20000 verified sentences (94112 Kuku words)`

DB readback after close:

- accepted: 7,736
- revised: 911
- under_review: 0
- verified total: 8,647 / 20,000
- Batch 171 reviews: 250
- Batch 171 lessons: 20
- Batch 171 lexeme/source-log rows: 46
- Batch 171 process events after export/docs/live logging: 19

Training export refreshed:

- total rows: 8,647
- train/dev/synthtest: 7,240 / 704 / 703
- manifest: `export/MANIFEST.json`

## Living books and live docs

Canonical report sources updated:

- `reports/KUKU-YALANJI-CORPUS-OPERATOR-GUIDE.md`: 8,647 count, Rule 129 close, Rule 130 handoff.
- `reports/kuku-yalanji-mega-grammar-cheatsheet-2026-07-02.md`: new Rule 129 section with examples and traps.
- `reports/kuku-yalanji-dictionary-errata-2026-07-02.md`: new Batch-171 errata/source section.
- `reports/SAMPLE-PRODUCTION-PAGES.md`: refreshed build-state note.

Rendered with:

- `./render-docs.sh`
- Rendered: `operator-guide.html`, `sample-pages.html`, `grammar-cheatsheet.html`, `dictionary-errata.html`,
  raw `.md` copies, and `index.html`.

Local rendered markers present:

- operator guide: `8,647`, `Rule 129`, `Rule 130`, `bank_172.py`,
  `batch-171-material-landscape-lexical-expansion-after-rule128-process.md`;
- grammar cheatsheet: `Rule 129`, `Diburr bubu-ngu wunan`, `Wulman madja-nga bundanday ngawa-nji`, `7240/704/703`;
- dictionary errata: `Batch-171`, `Diburr bubu-ngu wunan`, `Weak-source exclusion`, `46 lexeme/source-log`,
  process-log path;
- sample pages: `8,647`, `Batch 171`, `Rule 129`.

Live checks:

- `/docs` returned 301 to `/docs/`.
- `/docs/` resolved 200.
- All four `.html` docs returned 200.
- All four raw `.md` docs returned 200.
- Live markers present:
  - operator guide: `8,647`, `Rule 130`, `bank_172.py`, process-log path;
  - grammar cheatsheet: `Rule 129`, `Diburr bubu-ngu`, `Wulman madja-nga`, `7240/704/703`, process-log path;
  - dictionary errata: `Batch-171`, `Diburr bubu-ngu`, `Weak-source exclusion`, `46 lexeme/source-log`, export split;
  - sample pages: `8,647`, `Batch 171`, `Rule 129`, `diburr`.

## Next handoff

Next batch should be `batch-172`, proposed Rule 130: construction consolidation after Rule 129. Do not add new
lexical heads unless a repair forces it. Drill the Rule 129 material/landscape heads in old frames and keep active
the Rule 129 traps: `birra` leaf not lungs, `dumbul` bark only, `diburr` seed only, `kulji` stone/rock not mountain,
`manjal` mountain, no `kulji-bu` or instrument rows, defer `warrur` unless a fresh source pass justifies it,
`wulman`/`mayngku` loan/contact logging, common-noun `nyaji-l` perceivers ERG-marked, pronoun A bare, `babaji-y`
askers not ERG-marked, `yajarri-l` targets DAT:pt, and closed comitatives only.
