# Batch 170 process log - Rule 128 case-frame consolidation after Rule 127

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

## Operator intent

Batch 170 follows the construction cadence after Rule 127. It does not introduce new lexical heads or new morphology.
It drills the Rule 127 environmental heads through already controlled frames:

- water/firewood/wood-paperbark/grass as rest subjects, moved objects, and transfer objects;
- humpy/shelter as a seen object and a sourced LOC place;
- weather/sky heads as perceived or heard objects;
- `buyi`, `jarba`, `bilngkumu`, and `yirku-yirku` as rest or perceived objects only;
- `bana-ka`, `kuku-ku`, `minya-ka`, and `mayngku-ku` as sourced ask-about topics;
- only the closed comitative set.

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 and corpus-lexeme readback confirmed:

- `bana`: water; `bana-nga` water LOC; `bana-ka` water DAT topic.
- `baya`: fire/firewood; Patz possible-English note is unsubstantiated, so not loan-logged.
- `juku`: tree/wood/stick; `juku-ngu` tree LOC and `juku-ji` sourced stick comitative.
- `buyku`: paperbark.
- `jikan`: grass; `jikan-ba` grass LOC.
- `wurun`: humpy/shelter; `wurun-ba` humpy LOC read back from prior corpus/source rows.
- `ngurrban`: cloud.
- `muyar`: wind.
- `jiri`: sky.
- `wungar`: sun/day.
- `buyi`: bird.
- `jarba`: snake.
- `bilngkumu`: salt-water crocodile.
- `yirku-yirku`: frog.
- `janay`: stand/be, retained for the humpy-standing row.

Grammar readback reinforced the relevant controls: classifier table heads; `juku-ji`, `juku-ngu`, `juku-muny`;
`bana-nga`, `bana-ka`; `jikan-ba`; `baya-nga` and `baya` as fire/firewood; `wungar`; `ngurrban`; `muyar`;
`buyku`; and animal examples for `jarba`, `bilngkumu`, and `yirku-yirku`.

## Pre-bank duplicate scan

The first planned-surface scan found two exact duplicates:

- `Karrkay maral-anda mayngku-ku babajin.` already occurred in `batch-165`.
- `Wulman kami-nda yajarrin.` already occurred in `batch-166`.

They were repaired before banking by changing only sourced person targets:

- `Karrkay nganjan-anda mayngku-ku babajin.`
- `Wulman nganjan-anda yajarrin.`

The final planned-surface duplicate scan was clean.

## Static guard design

`bank_170.py` includes guards for:

- exactly 50 rows, sequence order, English punctuation, analysis separator, JSON fields, evidence, and confidence;
- frame names starting with `r128_`;
- 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`;
- lexical sense guards for water/firewood/stick-paperbark/grass/humpy/cloud/wind/sky/sun/bird/snake/crocodile/frog;
- no `INST` analysis from `juku` or animal heads, and comitatives limited to the closed sourced set;
- `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;
- exact duplicate Kuku surfaces are checked against all non-rejected rows before insertion.

## Planned row groups

- Rows 1-10: rest/standing rows with environmental and animal heads.
- Rows 11-20: object location/source/goal rows and a humpy perception row.
- Rows 21-30: perception/hearing rows for cloud, wind, sky, sun, bird, snake, and crocodile.
- Rows 31-35: ask-about rows with retained DAT topics.
- Rows 36-40: laugh-target rows with sourced DAT:pt targets.
- Rows 41-46: closed comitative rows with environmental places.
- Rows 47-50: additional animal/object transfer rows.

## Pre-bank state

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

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

`python3 -m py_compile batch_scripts/bank_170.py` passed.

Pre-bank lint:

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

Bank command:

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

Under-review lint:

- `lint: 8597 rows scanned, 0 issues flagged`
- `GOAL METRIC: 8547 / 20000 verified sentences (93748 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;
- lexicon: passed all 50 rows; checked all Rule 127 heads, `wurun-ba`, `janay`, and the `baya` possible-loan caution;
- syntax: passed all 50 rows; checked rest, standing, placement, transfer, perception/hearing, ask-about, laugh
  targets, and closed-comitative rows;
- fidelity: passed all 50 rows after duplicate repairs; checked no new instruments/comitatives/possessives from
  `juku` or animal heads, animal heads as rest/perceived objects only, and honest LOC glossing;
- register: passed all 50 rows; ordinary environmental, weather/sky, animal, perception/hearing, ask/laugh, and
  companion-motion rows pending elder verification.

`python3 -m py_compile batch_scripts/close_170.py` passed.

Close command:

- `python3 batch_scripts/close_170.py`
- Result: `closed batch-170: 50 accepted rows, 250 review passes, 20 lessons, 51 lexeme/source-log rows, 14 process events, under_review=0, verified corpus=8597`

Post-close lint:

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

DB readback after close:

- accepted: 7,686
- revised: 911
- under_review: 0
- verified total: 8,597 / 20,000
- Batch 170 reviews: 250
- Batch 170 lessons: 20
- Batch 170 lexeme/source-log rows: 51
- Batch 170 process events after export/docs/live logging: 19

Training export refreshed:

- total rows: 8,597
- train/dev/synthtest: 7,196 / 700 / 701
- manifest: `export/MANIFEST.json`

## Living books and live docs

Canonical report sources updated:

- `reports/KUKU-YALANJI-CORPUS-OPERATOR-GUIDE.md`: 8,597 count, Rule 128 close, Rule 129 handoff.
- `reports/kuku-yalanji-mega-grammar-cheatsheet-2026-07-02.md`: new Rule 128 section with examples and traps.
- `reports/kuku-yalanji-dictionary-errata-2026-07-02.md`: new Batch-170 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,597`, `Rule 128`, `Rule 129`, `bank_171.py`,
  `batch-170-case-frame-consolidation-after-rule127-process.md`;
- grammar cheatsheet: `Rule 128`, `Wurun bayan-ba janay`, `Wulman nganjan-anda yajarrin`, `7196/700/701`;
- dictionary errata: `Batch-170`, `Wurun bayan-ba janay`, `51 lexeme/source-log`, process-log path;
- sample pages: `8,597`, `Batch 170`, `Rule 128`.

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,597`, `Rule 128`, `Rule 129`, process-log path;
  - grammar cheatsheet: `Rule 128`, `Wurun bayan-ba janay`, `Wulman nganjan-anda yajarrin`, `7196/700/701`;
  - dictionary errata: `Batch-170`, `Wurun bayan-ba janay`, `51 lexeme/source-log`, process-log path;
  - sample pages: `8,597`, `Batch 170`, with `Rule 128` present in raw Markdown and wrapped across a line break in HTML.

## Next handoff

Next batch should be `batch-171`, proposed Rule 129: source-backed lexical expansion after Rule 128. Pick a small
new source-backed set only after exact dictionary and grammar readback, then put it through old frames first. Keep
active the Rule 128 traps: no new instruments/comitatives/possessives from `juku` or animal heads, `baya`
fire/firewood only with no automatic loan marking, LOC honesty for `bana-nga`/`juku-ngu`/`jikan-ba`/`wurun-ba`,
loan logging for `wulman`/`mayngku`, common-noun `nyaji-l` perceivers ERG-marked, `babaji-y` askers not ERG-marked,
`yajarri-l` targets DAT:pt, and closed comitatives only.
