# Batch 151 Process Log - Rule 109 Plant, Tree, Fibre, Seed, Bark, And Material Lexicon

Date: 2026-07-07  
Corpus start state: 7,597 / 20,000 verified sentences, 89,801 Kuku words, lint green.  
Batch target: 50 hand-authored rows.  
Rule target: Rule 109 - fine-grained plant, tree, fibre, seed, bark, and material lexicon.  
Scripts: `batch_scripts/bank_151.py`, `batch_scripts/close_151.py`.

## Source Pass

The operator guide handoff required rereading Rules 91, 103, 107, and 108 and watching for plant/material wrong-sense drift:

- `juku`: tree/wood/splinter; frame decides tree vs material.
- `dubal`: bark/coolamon/bark container; not a generic bowl, bed, or every bark item.
- `ngunyin`: dillybag/bark strips/web/placenta; weaving frame selects craft sense.
- `yibuy`: loya cane and walking-stick material; already covered heavily in Batch 149, so not made the centre of this batch.
- `birra`: leaf/lungs; plant host or broad-leaf context selects leaf.

Grammar passages reread and used:

- Patz ex.524: `Birra juku-ngu/juku-muny yalbay-bajaku`; locative = leaves on tree, ablative = leaves from tree.
- Patz ex.525: `Mayi yinya-nga/-muny juku-ngu/-muny ngulkurr...`; fruit on/from tree, good.
- Patz ex.526: `Dumbul marra-nga/-mu/*-muny dandi`; shell/hard covering on/of zamia nut; ablative rejected.
- Patz ex.544: `Ngayu wawu jirray juku-ku birra-jirr-ka jabajaba-jirr-ka`; tree with many big leaves.
- Patz ex.450-451: `jalbu-jalbu-ngku marra dinda-l...`; zamia nuts roasted before pounding.
- Patz ex.483-484: `baya muja-l-muja-nya` / `baya muja-nya`; firewood-gathering frame, kept as background only.
- Patz ex.502: `juku-ji dunga-y`; stick/comitative frame, kept as background only.
- Patz ex.606: `mayi-ka yala mayngku`; fruit comparison, not reused because the batch stayed lexical.
- Patz ex.658: `bana-nga waju-l`; boiling in water.
- Text 51 lines 6-13: `mayi kabal warrmba-bunga-ny`, `Ngali juku-ngu daka-l`, `juku-muny ... mayi`.
- Text 51 lines 61-67: `dubal nyanda-nya`, `bana nyangarri-nya dubal-ba`, `buyku bundanda-nya`.

Dictionary flora/material pass used the structured YAML `words` list, not ad hoc memory. Entries selected for actual rows include:

- Plant parts and parts of trees: `birra`, `dakil-dakil`, `wakumba`, `dingal`, `jakalkulu`, `walmba`, `dimbirr`, `bindi`, `jurrbu`.
- Fruit/food/seed terms: `mayi`, `kabal`, `bilar`, `binainyji`, `banday`, `junjun`, `bambayal`, `banjay`, `wukay`, `bangkan`, `diburr`, `kubirr-kubirr`.
- Bark/fibre/material terms: `bilanji`, `mawu`, `kakan`, `bajarr`, `buyku`, `dubal`, `kuralbi`, `warrur`, `ngunyin`, `kanunjul`, `wanjakan`.
- Named trees: `babajaka`, `bajar`, `baril-baril`, `duwar`, `jina-jina`, `yumu`.

## Exclusions And Sense Controls

- `barka` was excluded. The dictionary has conflicting entries: yellow water snake vs Queensland nut. This batch must not teach it as an ordinary nut without a fresh source decision.
- `wankarr` was excluded. `kubirr-kubirr` prose mentions a necklace, but `wankarr` did not appear as a clean headword in the lookup.
- `garden` was excluded from the seed-planting row despite the dictionary usage `Ngayu diburr nandan gardenba`; the final row uses native `bubu-ngu`.
- Unhyphenated `jinajina` was blocked because it trips the productive-reduplication lint pattern; the row uses `Jina-jina`.
- Medicinal and ritual prose was kept minimal: `bangkan` only gets a boiling-in-water row; `kanunjul` is only seen or located on a spear; `wanjakan` bark is only located at shelter.

## Duplicate Preflight

Manual exact-surface candidate preflight rejected source-close rows already accepted in earlier batches:

```text
DUP batch-130.25 Ngayu wawu jirray juku-ku birra-jirr-ka jabajaba-jirr-ka.
DUP batch-133.02 Birra juku-muny yalbay-bajaku.
DUP batch-133.17 Kabal mayi warrmba-bungan.
DUP batch-133.18 Ngali juku-ngu dakal.
DUP batch-146.11 Dumbul marra-nga dandi.
DUP batch-133.03 Mayi yinya-nga juku-ngu ngulkurr.
```

Final preflight over the replacement set:

```text
checked 50
```

## Final Row Inventory

- Rows 1-12: plant parts and tree parts in locative/ablative/quality frames.
- Rows 13-28: Leichhardt fruit, yams, candlenut, fig-like fruit, wild fruit, roots, seeds, and seed planting.
- Rows 29-42: grass/fibre/bark/paperbark/resin/shelter material rows.
- Rows 43-50: named trees, flowers, and plant shoots.

## Verification Plan

1. Compile `bank_151.py` and `close_151.py`.
2. Run `scan_static()`.
3. Bank 50 rows under review.
4. Run whole-corpus lint.
5. Close with 250 five-lens review passes.
6. Run whole-corpus lint again.
7. Refresh train/dev/synthtest export.
8. Update operator guide, grammar cheatsheet, and dictionary errata.
9. Run `./render-docs.sh`.
10. Verify local Caddy docs routes and public `https://mobtranslate.com/docs/` routes.

## Actual Verification

Compile and static scan:

```text
python3 -m py_compile batch_scripts/bank_151.py batch_scripts/close_151.py
PYTHONPATH=batch_scripts python3 -c "import bank_151; ... scan_static()"
```

Result:

```text
compile clean
static issues: 0
```

Bank and under-review lint:

```text
python3 batch_scripts/bank_151.py
python3 lint_corpus.py
```

Result:

```text
banked batch-151: 50 rows under_review; avg Kuku words/row=3.46

lint: 7647 rows scanned, 0 issues flagged
GOAL METRIC: 7597 / 20000 verified sentences  (89801 Kuku words)
```

Close:

```text
python3 batch_scripts/close_151.py
```

Result:

```text
closed batch-151: 50 accepted rows, 250 review passes, 16 lessons, 49 lexeme/source-log rows, 9 process events, verified corpus=7647
```

Post-close lint:

```text
python3 lint_corpus.py
```

Result:

```text
lint: 7647 rows scanned, 0 issues flagged
GOAL METRIC: 7647 / 20000 verified sentences  (89974 Kuku words)
```

Export refresh:

```text
python3 export_training.py
```

Result:

```text
Exported 7647 rows
train=6407
dev=616
synthtest=624
top constructions: ergative=1772, negation=1625, purposive=1395, subordinate=1096, ablative=984
```

Live docs were rendered from the program root:

```text
./render-docs.sh
```

Marker checks on rendered disk artifacts confirmed:

```text
operator-guide.md/html: 7,647; Rules 1-109; Rule 110; bank_152.py; close_152.py
grammar-cheatsheet.md/html: Rule 109 - Fine-grained plant; Lint GREEN 7647
dictionary-errata.md/html: Batch-151; Lint GREEN 7647
```

Local Caddy route verification with `--resolve mobtranslate.com:443:127.0.0.1`:

```text
LOCAL /docs                              301 https://mobtranslate.com/docs/
LOCAL /docs/                             200
LOCAL /docs/operator-guide.html          200
LOCAL /docs/operator-guide.md            200
LOCAL /docs/grammar-cheatsheet.html      200
LOCAL /docs/grammar-cheatsheet.md        200
LOCAL /docs/dictionary-errata.html       200
LOCAL /docs/dictionary-errata.md         200
LOCAL /docs/sample-pages.html            200
LOCAL /docs/sample-pages.md              200
```

Public route verification through `https://mobtranslate.com`:

```text
PUBLIC /docs                             200 https://mobtranslate.com/docs/
PUBLIC /docs/                            200 https://mobtranslate.com/docs/
PUBLIC /docs/operator-guide.html         200 https://mobtranslate.com/docs/operator-guide.html
PUBLIC /docs/operator-guide.md           200 https://mobtranslate.com/docs/operator-guide.md
PUBLIC /docs/grammar-cheatsheet.html     200 https://mobtranslate.com/docs/grammar-cheatsheet.html
PUBLIC /docs/grammar-cheatsheet.md       200 https://mobtranslate.com/docs/grammar-cheatsheet.md
PUBLIC /docs/dictionary-errata.html      200 https://mobtranslate.com/docs/dictionary-errata.html
PUBLIC /docs/dictionary-errata.md        200 https://mobtranslate.com/docs/dictionary-errata.md
PUBLIC /docs/sample-pages.html           200 https://mobtranslate.com/docs/sample-pages.html
PUBLIC /docs/sample-pages.md             200 https://mobtranslate.com/docs/sample-pages.md
```

No-follow header checks:

```text
/docs     HTTP/2 301  location: /docs/
/docs/    HTTP/2 200
```

Body-marker checks on both local and public HTML confirmed:

```text
7,647 / 20,000
Rules 1-109
Rule 110
bank_152.py
Rule 109 - Fine-grained plant
Batch-151
Lint GREEN 7647
```

Structured process ledger rows written for Batch 151: source pass, risk controls, duplicate preflight,
bank success, row inventory, compile success, under-review lint, five-lens pass, close success, post-close lint,
export refresh, and live-docs-verified (`process_event` 125).
