# Batch 149 Process Log - Camp Objects, Containers, And Everyday Implements

Corpus: `claude-synthetic-v1-2026-07-02`  
Batch: `batch-149`  
Rule: 107, lexical batch  
Start checkpoint: 7,497 / 20,000 accepted or revised sentences, lint green.

## Goal

Add 50 hand-authored rows for Kuku Yalanji camp objects, containers, craft objects, and everyday implements:
`bayan`, `baya`, `jungkalu`, `bulin`, `balji`, `ngunyin`, `kurmun`, `karra`, `dubal`, `kalka`, `balur`,
`naybu`, `jimal`, `jaba`, `bangkal`, `kurrma`, `marrakan`, and `kambi`.

The target is concrete lexical coverage with academic restraint. This is not a modern household vocabulary batch.
Terms such as table, gate, bucket, cassette, torch, brake, truck, motorcar, and store are excluded unless already
source-required elsewhere. No row content is generated by script. `bank_149.py` stores hand-authored rows, runs static
and cross-corpus duplicate checks, and records source/process metadata in `process_events`.

## Process Storage Policy

This batch stores the process as first-class data:

- Human-readable narrative log: this file.
- Structured SQLite ledger: `process_events` in `synthetic.db`.
- Reproducible artifacts: `batch_scripts/bank_149.py` and `batch_scripts/close_149.py`.
- Review artifacts: 250 five-lens review rows at close, plus lessons and lexeme/source logs.
- Live books: operator guide, grammar cheatsheet, and dictionary errata updated and rendered after close.

The audit trail should let a later linguist inspect source decisions, exclusions, duplicate preflight, object-locative
choices, instrumental implement analysis, loan restraint, lint results, manual review, close, export, and live-doc
verification.

## Source Pass

Primary source checks before banking:

- Operator handoff:
  - Next rule: camp objects, containers, everyday household/craft implements.
  - Keep concrete: houses/camps, plates/containers, bark/paperbark items, dillybags, ropes/cords, spears/throwers,
    digging-stick-adjacent objects only when sourced, fire/food implements not already saturated, and natural verbs.
  - Do not turn it into a modern household vocabulary unless the word is actually in the dictionary or Patz.
- Living-book reread:
  - Rules 83, 91, 95, 96, 104, 105, 106.
  - Errata warnings on `buyandi-l`, `yakal`, `dumbarrin`, implement instrumentals, and loan-heavy handling rows.
- Grammar checks:
  - `baya` fire/firewood, `kalka` spear, `bayan` camp/house/shelter.
  - `balji-ka`, `ngunyin-ji`, `mala-balji`, and bag/dillybag examples.
  - ex.234 `bayan ngara-ny` camp setup.
  - ex.247 `naybu-bu` knife as instrumental implement.
  - ex.283 `balji wukurri-ny` bag weaving from plant material.
  - ex.402 broken bag plus new-bag-making frame.
  - ex.413 `kurmun` made for mother to carry.
  - ex.579 bag-location question.
  - ex.593-595 `jungkalu` negation/breaking variants.
  - ex.200 `bulin-ba yijarri-ka` plate/location frame.
  - Text lines with `bayan ngara-nya`, `baya waju-ny`, `dubal nyanda-nya`, and `bana nyangarri-nya dubal-ba`.
  - Narrative earth-oven lines with `kurrma-nga` and `kurrma waju-nyu`.
- Dictionary cross-checks:
  - nouns/objects: `balji`, `balur`, `baya`, `bayan`, `birra`, `bulin`, `dubal`, `jaba`, `jimal`, `jungkalu`,
    `kalka`, `kambi`, `karra`, `kurrma`, `kurmun`, `marrakan`, `naybu`, `ngunjil`, `ngunyin`, `wangal`, `yibuy`.
  - verbs: `balkal`, `bungal`, `damal`, `dumbarril`, `julurril`, `kajal`, `karrbal`, `kidal`, `kulbal`,
    `kuna-bungal`, `manil`, `mujal`, `mumbal`, `nyandal`, `nyangarril`, `wajul`, `wukurril`, `yakal`, `yijarril`.
  - case-sensitive and homograph checks: `bangkal` noun tongs versus `bangkal` verb gather; `Milbayarr` avoided;
    `yinkar` checked but excluded.

## Construction Decisions

- Rows 1-15 cover camps, fire/firewood, charcoal, billycan, plate, and pouring/washing container frames.
- Rows 16-31 cover bags, dillybags, sacks, ropes, leaves, bark/coolamon containers, and material-source frames.
- Rows 32-45 cover spear, spear thrower, knife, firestick, stick, cooking tongs, and earth oven.
- Rows 46-50 cover dugout canoe and clothing.

## Rejected Or Risk-Controlled Forms

- Exact duplicate preflight rejected two otherwise useful rows:
  - `Baya waju-l-waju, kiway kada-nyji.` already exists in `batch-125.07`.
  - `Nyulu wawu kalka balka-nka.` already exists in `batch-140.30`.
- `Milbayarr` was excluded because the dictionary has mixed place/euphemism/woomera entries. `Balur` is the safer
  ordinary spear-thrower term.
- `Yinkar` was excluded because it is a dillybag for remains, not an ordinary bag.
- `Dubal` is used only for bark/coolamon/bark-container contexts, not a general English bowl.
- `Bangkal` is used as noun "tongs", never as the gather verb in these rows.
- `Ngunjil` is charcoal/hot coals/hot ashes, not a synonym for `baya`.
- `Naybu`, `bulin`, and `jungkalu` are used sparingly and logged as loan/post-contact terms.
- No modern household list was added.

## Verification And Closeout

Planned commands from the corpus root:

```text
python3 -m py_compile batch_scripts/bank_149.py batch_scripts/close_149.py
python3 batch_scripts/bank_149.py
python3 lint_corpus.py
python3 batch_scripts/close_149.py
python3 lint_corpus.py
python3 export_training.py
```

Actual verification will be appended below during execution.

## Actual Verification

Executed from the corpus root on 2026-07-07:

```text
python3 -m py_compile batch_scripts/bank_149.py batch_scripts/close_149.py
```

Result: clean compile.

One one-off interactive static-scan import was attempted from stdin and failed because `batch_scripts/process_ledger.py`
was not on `sys.path` in that import context. This did not affect the batch: the normal `bank_149.py` execution ran its
own static scan before inserting rows.

Manual exact-surface candidate preflight before writing the final script found two duplicates and replaced them:

```text
8  DUP batch-125.07  Baya waju-l-waju, kiway kada-nyji.
34 DUP batch-140.30  Nyulu wawu kalka balka-nka.
```

Final candidate preflight:

```text
checked 50
```

Bank and under-review lint:

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

Result:

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

lint: 7547 rows scanned, 0 issues flagged
GOAL METRIC: 7497 / 20000 verified sentences  (89426 Kuku words)
```

Close:

```text
python3 batch_scripts/close_149.py
```

Result:

```text
closed batch-149: 50 accepted rows, 250 review passes, 14 lessons, 33 lexeme/source-log rows, 7 process events, verified corpus=7547
```

Post-close lint:

```text
python3 lint_corpus.py
```

Result:

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

Export refresh:

```text
python3 export_training.py
```

Result:

```text
Exported 7547 rows
train=6326
dev=603
synthtest=618
top constructions: ergative=1754, negation=1622, purposive=1395, subordinate=1096, ablative=971
```

Structured process ledger rows written for Batch 149: source pass, risk controls, duplicate preflight, bank success,
row inventory, compile success, under-review lint, five-lens pass, close success, post-close lint, and export refresh.
A live-doc verification event was appended after the public docs were rendered and checked.

## Live Books

Updated source books:

- `reports/KUKU-YALANJI-CORPUS-OPERATOR-GUIDE.md`: 7,547 / 20,000, Rules 1-107, Rule 108 handoff,
  `bank_150.py`, `close_150.py`.
- `reports/kuku-yalanji-mega-grammar-cheatsheet-2026-07-02.md`: added Rule 107 camp objects, containers, and everyday
  implements section.
- `reports/kuku-yalanji-dictionary-errata-2026-07-02.md`: added Batch-149 errata/watchlist section.

Rendered command:

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

Rendered outputs:

```text
operator-guide.html
sample-pages.html
grammar-cheatsheet.html
dictionary-errata.html
index.html
raw .md files copied alongside
```

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

```text
/docs -> 301 /docs/
/docs/ -> 200
/docs/operator-guide.html -> 200
/docs/operator-guide.md -> 200
/docs/grammar-cheatsheet.html -> 200
/docs/grammar-cheatsheet.md -> 200
/docs/dictionary-errata.html -> 200
/docs/dictionary-errata.md -> 200
/docs/sample-pages.html -> 200
/docs/sample-pages.md -> 200
```

Public route verification:

```text
https://mobtranslate.com/docs -> 301 /docs/
https://mobtranslate.com/docs/ -> 200
all four HTML pages -> 200
all four raw .md pages -> 200
```

Body markers verified locally and publicly:

```text
operator guide: 7,547 / 20,000; Rules 1-107; Rule 108; bank_150.py; close_150.py
grammar cheatsheet: Rule 107 - Camp objects; Lint GREEN 7547
dictionary errata: Batch-149; Lint GREEN 7547
```

Structured process ledger now includes the live-doc verification event as well.
