# Batch 172 process log - Rule 130 construction consolidation after Rule 129

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

## Operator intent

Batch 172 follows the construction cadence after Rule 129. It does not add new lexical heads. It consolidates the
Rule 129 material/landscape heads in old frames:

- rest and standing rows with retained LOC;
- object placement, leaving, and transfer with overt ABS objects;
- matched common-noun/pronoun perception rows;
- duplicate-safe ask-about and laugh-target maintenance;
- closed-comitative motion rows.

No row is generator-authored. The 50 sentence pairs are hand-authored in the main loop after source readback.

## 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 the Rule 129 heads and retained old heads:

- `birra`: leaf; lungs sense excluded.
- `dumbul`: bark/hard covering; bark sense selected.
- `kubu`: smoke.
- `kulji`: pebbles/small stones; grammar allows stone/rock but not mountain.
- `jukar`: sand.
- `madja`: scrub/jungle/rain forest.
- `manjal`: mountain.
- `diburr`: seed/egg/bullet/tablet; seed sense selected here.
- `nganka`: flower/blossom.
- `ngurrbal`: fog.
- retained person/topic/place heads: `bayan`, `bubu`, `wabarr`, `ngalkal`, `balji`, `baral`, `bana`, `juku`,
  `ngamu`, `nganjan`, `babi`, `kami`, `maral`, `dingkar`, `jalbu`, `warru`, `karrkay`, `jawun`, `wulman`,
  `wulbuman`, `minya`, `kuku`, `mayngku`, and `kambi`.

Grammar and corpus readback reinforced:

- `kulji`, `kulji-nga`, and the warning that `kulji` is stone/rock but not mountain;
- `manjal-ba` and `manjal-muny`;
- `bayan-ka`, `bayan-muny`, `bubu-ngu`, `wabarr-ba`, `balji-nga`, `baral-ba`, `ngalkal-ba`, `juku-ngu`,
  `madja-nga`, `bana-ka`, `kuku-ku`, `minya-ka`, `mayngku-ku`;
- person forms `ngamu-ndu`, `nganjan-anda`, `babi-nda`, `kami-nda`, and `maral-anda`;
- closed comitatives `ngawa-nji`, `jawun-unji`, `juku-ji`, and `kambi-ji`;
- retained predicates `wuna-y`, `kada-y`, `jana-y`, `dunga-y`, `yijarri-l`, `bawa-l`, `wundi-l`, `nyaji-l`,
  `babaji-y`, `yajarri-l`, and `bunday`.

## 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_172.py` includes guards for:

- exactly 50 rows, sequence order, English punctuation, analysis separator, JSON fields, evidence, and confidence;
- frame names starting with `r130_`;
- no temporal-clitic construction markers in this construction 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/hard covering and use bark only in English;
- `diburr` rows must use the seed sense only;
- `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 the closed sourced set;
- exact duplicate Kuku surfaces are checked against all non-rejected rows before insertion.

## Planned row groups

- Rows 1-10: rest, coming, standing, and place rows.
- Rows 11-20: placement, leaving, and transfer rows.
- Rows 21-38: matched perception rows for the Rule 129 heads.
- Rows 39-43: ask-about rows with retained DAT topics.
- Rows 44-48: laugh-target rows with sourced DAT:pt targets.
- Rows 49-50: closed-comitative motion rows.

## Pre-bank state

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

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

`python3 -m py_compile batch_scripts/bank_172.py batch_scripts/close_172.py` passed.

Pre-bank lint:

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

Bank command:

- `python3 batch_scripts/bank_172.py`
- Result: `banked batch-172: 50 rows under_review, avg_words=3.62, process_events=8`

Under-review lint:

- `lint: 8697 rows scanned, 0 issues flagged`
- `GOAL METRIC: 8647 / 20000 verified sentences (94112 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 the Rule 129 heads and retained `birra` leaf, `dumbul` bark, `diburr` seed,
  `kulji` stone/rock not mountain, `manjal` mountain, and `warrur` exclusion;
- syntax: passed all 50 rows; checked rest, coming/source, standing, placement, leaving, transfer, perception,
  ask-about, laugh-target, and closed-comitative frames;
- fidelity: passed all 50 rows; checked duplicate freedom, no new lexical heads, 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_172.py`
- Result: `closed batch-172: 50 accepted rows, 250 review passes, 20 lessons, 42 lexeme/source-log rows, 14 process events, under_review=0, verified corpus=8697`

Post-close lint:

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

DB readback after close:

- accepted: 7,786
- revised: 911
- under_review: 0
- verified total: 8,697 / 20,000
- Batch 172 reviews: 250
- Batch 172 lessons: 20
- Batch 172 lexeme/source-log rows: 42
- Batch 172 process events after export/docs/live logging: 19

Training export refreshed:

- total rows: 8,697
- train/dev/synthtest: 7,281 / 710 / 706
- manifest: `export/MANIFEST.json`

## Living books and live docs

Canonical report sources updated:

- `reports/KUKU-YALANJI-CORPUS-OPERATOR-GUIDE.md`: 8,697 count, Rule 130 close, Rule 131 handoff.
- `reports/kuku-yalanji-mega-grammar-cheatsheet-2026-07-02.md`: new Rule 130 section with examples and traps.
- `reports/kuku-yalanji-dictionary-errata-2026-07-02.md`: new Batch-172 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,697`, `Rule 130`, `Rule 131`, `bank_173.py`,
  `batch-172-construction-consolidation-after-rule129-process.md`;
- grammar cheatsheet: `Rule 130`, `Bayan manjal-ba janay`, `Wulman juku-ji manjal-ba dungan`, `7281/710/706`;
- dictionary errata: `Batch-172`, `Bayan manjal-ba janay`, `No instrument import`, `42 lexeme/source-log`,
  process-log path;
- sample pages: `8,697`, `Batch 172`, `Rule 130`.

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,697`, `Rule 131`, `bank_173.py`, process-log path;
  - grammar cheatsheet: `Rule 130`, `Bayan manjal-ba`, `Wulman juku-ji`, `7281/710/706`, process-log path;
  - dictionary errata: `Batch-172`, `Bayan manjal-ba`, `No instrument import`, `42 lexeme/source-log`, export split;
  - sample pages: `8,697`, `Batch 172`, `Rule 130`, `kulji-bu`.

## Next handoff

Next batch should be `batch-173`, proposed Rule 131: source-backed lexical expansion after Rule 130. Pick a small
new set only after exact dictionary, grammar, and lexeme-table readback. Keep active the Rule 130 traps: no weak
`warrur` without fresh source evidence; `kulji` stone/rock not mountain; no new instruments/comitatives/possessives;
explicit selected senses for any polysemous head; loan/contact forms logged; 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 unless a new form is directly sourced.
