# Batch 168 process log - Rule 126 case-frame consolidation after Rule 125

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

## Operator intent

Batch 168 follows the construction cadence after Rule 125. It does not introduce new lexical heads or new morphology.
It consolidates the Rule 125 heads inside already sourced case frames:

- fish/meat and tool/weapon nouns as rest subjects, moved objects, perceived objects, and safe source/goal objects;
- `kaba` as rain in a weather predicate, not as a stretched source-motion subject;
- `kija` moon and `dawar` star in perception-safe rows only;
- `warrbi`, `naybu`, `kalka`, `mirru`, `kunjuri`, `wangal`, and `marrkin` as ABS objects or rest subjects, not as new instruments or comitatives;
- ask-about rows retain ABS/S asker, LOC:pt person asked, and sourced DAT topics;
- laugh rows retain explicit DAT:pt targets;
- motion/staying rows use only the closed comitative set already admitted.

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 grammar readback from the Rule 125 handoff was reused and checked before authoring:

- `kuyu`: fish; retained as rest subject, placed object, and perceived object.
- `minya`: meat/flesh food/animal; retained as rest subject, placed/source object, perceived object, and `minya-ka` DAT topic.
- `kaba`: rain; Batch 168 uses a weather predicate with sourced `dara-y` fall.
- `dawar`: star; safe star lexeme only.
- `kija`: moon/month only; no other sense.
- `warrbi`: axe sense only.
- `naybu`: knife; English loan, logged whenever foregrounded.
- `kalka`: fishing spear / spear; used instead of excluded `biyul`.
- `mirru`: club/nullanulla.
- `kunjuri`: shield.
- `wangal`: boomerang noun only.
- `marrkin`: gun/rifle; musket/rifle loan, logged whenever foregrounded.

Retained case and predicate inventory: `bubu-ngu`, `wabarr-ba`, `ngalkal-ba`, `balji-nga`, `baral-ba`,
`bayan-ba`, `bayan-ka`, `bayan-muny`, `jalun-bu`, `minya-ka`, `kuku-ku`, `mayngku-ku`, `ngawa-nji`,
`jawun-unji`, `nganjan-anji`, `juku-ji`, `kambi-ji`, `wuna-y`, `dara-y`, `yijarri-l`, `bawa-l`,
`wundi-l`, `mani-l`, `nyaji-l`, `babaji-y`, `yajarri-l`, `dunga-y`, and `bunday`.

`biyul` remains excluded because the dictionary entry carries a Nyungkal/Yalanji caution. `Baral-muny` remains
excluded. New instrument, comitative, and possessive analogies remain excluded.

## Pre-bank duplicate scan

The first planned-surface scan found one exact duplicate:

- `Ngamu kambi-ji wabarr-ba dungan.` already occurred in `batch-165`.

It was repaired before banking by changing only the sourced location:

- `Ngamu kambi-ji ngalkal-ba dungan.`

The weather row was also tightened before banking:

- Draft: `Kaba jalun-muny kadan.` / "Rain came from the sea."
- Repair: `Kaba bayan-ba daran.` / "Rain fell at camp."
- Reason: the repaired row keeps `kaba` in a more directly sourced weather/fall frame and avoids stretching a
  source-motion construction.

The final planned-surface duplicate scan was clean.

## Static guard design

`bank_168.py` includes guards for:

- exactly 50 rows, sequence order, English punctuation, analysis separator, JSON fields, evidence, and confidence;
- frame names starting with `r126_`;
- no temporal-clitic construction markers in this consolidation batch;
- no denied/out-of-scope tokens: `yah`, `ngawuya`, `walnga`, `maja-nga`, `yunga`, `bada-bada`,
  `wangkar-wangkar`, or `biyul`;
- no unsourced `baral-muny`, no unsourced `kadar-anji`, and no `ngunyin-ji` drift;
- `kija` rows must gloss moon/month;
- English star rows must use `dawar`;
- `wangal` must be boomerang noun, and `warrbi` must be axe;
- `naybu`, `marrkin`, `mayngku`, and `wulman` 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;
- `COMIT` analyses must use one of the closed sourced comitative forms;
- possessive object forms must have explicit `POSS` analysis;
- exact duplicate Kuku surfaces are checked against all non-rejected rows before insertion.

## Planned row groups

- Rows 1-10: rest/weather rows with Rule 125 heads.
- Rows 11-20: object location/source/goal rows.
- Rows 21-30: perception contrasts with common-noun/pronoun A and sky nouns.
- Rows 31-35: ask-about rows with `minya-ka`, `kuku-ku`, and `mayngku-ku`.
- Rows 36-40: laugh-target rows with explicit DAT:pt targets.
- Rows 41-46: closed comitative motion/staying rows.
- Rows 47-50: additional object transfer/leave rows for gun, shield, club, and axe.

## Pre-bank state

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

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

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

Pre-bank lint:

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

Bank command:

- `python3 batch_scripts/bank_168.py`
- Result: `banked batch-168: 50 rows under_review, avg_words=3.70, process_events=8`

Under-review lint:

- `lint: 8497 rows scanned, 0 issues flagged`
- `GOAL METRIC: 8447 / 20000 verified sentences (93384 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 125 heads, with `kaba` kept to weather, `kija` moon-only,
  `dawar` star, `wangal` boomerang noun, `warrbi` axe, and loan flags on `naybu`, `marrkin`, `mayngku`, and `wulman`;
- syntax: passed all 50 rows; checked rest, placement, source/goal transfer, common-noun `nyaji-l` ERG,
  unmarked pronoun A, `babaji-y` ask-about frames, `yajarri-l` DAT:pt targets, and closed comitatives;
- fidelity: passed all 50 rows after pre-bank duplicate and weather repairs; no `biyul`, no `baral-muny`, no new
  instrument/comitative/possessive analogy;
- register: passed all 50 rows; food, rain, sky nouns, implements, seeing, asking, laughing, and companion motion,
  pending elder verification.

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

Close command:

- `python3 batch_scripts/close_168.py`
- Result: `closed batch-168: 50 accepted rows, 250 review passes, 20 lessons, 45 lexeme/source-log rows, 14 process events, under_review=0, verified corpus=8497`

Post-close lint:

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

DB readback after close:

- accepted: 7,586
- revised: 911
- under_review: 0
- verified total: 8,497 / 20,000
- Batch 168 reviews: 250
- Batch 168 lessons: 20
- Batch 168 lexeme/source-log rows: 45
- Batch 168 process events after export/docs/live logging: 19

Training export refreshed:

- total rows: 8,497
- train/dev/synthtest: 7,113 / 692 / 692
- manifest: `export/MANIFEST.json`

## Living books and live docs

Canonical report sources updated:

- `reports/KUKU-YALANJI-CORPUS-OPERATOR-GUIDE.md`: 8,497 count, Rule 126 close, Rule 127 handoff.
- `reports/kuku-yalanji-mega-grammar-cheatsheet-2026-07-02.md`: new Rule 126 section with examples and traps.
- `reports/kuku-yalanji-dictionary-errata-2026-07-02.md`: new Batch-168 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,497`, `Rule 126`, `Rule 127`, `bank_169.py`,
  `batch-168-case-frame-consolidation-after-rule125-process.md`;
- grammar cheatsheet: `Rule 126`, `Kaba bayan-ba daran`, `Ngamu kambi-ji ngalkal-ba dungan`, `7113/692/692`;
- dictionary errata: `Batch-168`, `Kaba bayan-ba daran`, `45 lexeme/source-log`, process-log path;
- sample pages: `8,497`, `Batch 168`, `Rule 126`.

Live checks:

- `/docs` resolved to `/docs/`.
- `/docs/` returned 200.
- All four `.html` docs returned 200.
- All four raw `.md` docs returned 200.
- Live markers present:
  - operator guide: `8,497`, `Rule 126`, `Rule 127`, process-log path;
  - grammar cheatsheet: `Rule 126`, `Kaba bayan-ba daran`, `Ngamu kambi-ji ngalkal-ba dungan`, `7113/692/692`;
  - dictionary errata: `Batch-168`, `Kaba bayan-ba daran`, `45 lexeme/source-log`, process-log path;
  - sample pages: `8,497`, `Batch 168`, with `Rule 126` present in raw Markdown and wrapped across a line break in HTML.

## Next handoff

Next batch should be `batch-169`, proposed Rule 127: source-backed lexical expansion after Rule 126. Pick a small
set of new heads only after exact dictionary and grammar readback, then put them in old frames first. Keep active
the Rule 126 traps: no `biyul`, `kija` moon/month only, `dawar` for star, `wangal` boomerang noun only, `warrbi`
axe only, loan logging for known loan/contact forms, no new instrument/comitative/possessive analogies, no
weather-source stretch for `kaba`, no `baral-muny`, no ERG `babaji-y` askers, ERG common-noun `nyaji-l` perceivers,
explicit DAT:pt targets for `yajarri-l`, and closed comitatives only.
