# Batch 338 process log

## Scope

- Batch: `batch-338`
- Rule: **Rule 296**
- Planned count: 50 rows
- Starting verified count: 16,947 / 20,000
- Remaining before batch: 3,053
- Frame family: visible water-fauna singular/third-person **past** perception after Rule 295.
- Construction: `PRONOUN TARGET DEMONSTRATIVE nyajin`.
- Purpose: add the sourced past counterpart to Rule 295's visible water-fauna nonpast field while keeping semantic scope to visible object reference/perception only.

## Source readback

- Core dictionary-derived lexicon line 744: `ngawiya` "sea turtle", neutral, hunted-food note; Rule 296 selects visible sea-turtle reference only, not hunting, turtle-spearing, cooking, or eating.
- Core dictionary-derived lexicon line 745: `ngujay` "freshwater turtle", neutral; visible freshwater-turtle reference only.
- Core dictionary-derived lexicon line 751: `kuyu` "fish", neutral as food/object; visible generic-fish reference only, not catching, spearing, bait, net, cooking, or eating.
- Core dictionary-derived lexicon line 753: `yawu` "stingray", ambiguous; visible stingray reference only, not danger, hunting, spearing, or catch rows.
- Core dictionary-derived lexicon line 754: `judi` "barramundi"; visible Yalanji-form barramundi reference only, not Nyungkul replacement forms or fishing/cooking rows.
- Core dictionary-derived lexicon line 755: `ngalkun` "mullet", neutral; visible mullet reference only.
- Core dictionary-derived lexicon line 756: `kubarr` "big black freshwater eel", neutral; visible freshwater-eel reference only, not colour/blackness rows.
- Core dictionary-derived lexicon line 757: `kiju` "mudcrab", neutral; visible mudcrab reference only, not biting, catching, cooking, or warning rows.
- Core dictionary-derived lexicon line 758: `wakal` "prawn, lobster", neutral; visible prawn reference only, not lobster alternation, catching, cooking, or eating.
- Core dictionary-derived lexicon line 759: `julul` "oyster", neutral; visible oyster reference only, not gathering, eating, shore, reef, or ecology rows.
- Patz pronoun tables: bare nominative `ngayu`, `yundu`, `nyulu`, `bula`, and `jana`.
- Patz local-demonstrative material: bare `yaluy` "here" and `yinyay` "there".
- Patz verbal support: examples source `nyaji-ny` "see-PAST", the tense section sources past `-ny`, and the corpus convention supplies the surface `nyajin`.

## Preflight

- Final target set inherited from Rule 295: `ngawiya`, `ngujay`, `kuyu`, `yawu`, `judi`, `ngalkun`, `kubarr`, `kiju`, `wakal`, `julul`.
- Support set: `ngayu`, `yundu`, `nyulu`, `bula`, `jana`, `yaluy`, `yinyay`, `nyajin`.
- Coverage before banking:
  - targets: `ngawiya` 90, `ngujay` 22, `kuyu` 436, `yawu` 31, `judi` 11, `ngalkun` 17, `kubarr` 41, `kiju` 42, `wakal` 13, `julul` 21.
  - support: `ngayu` 1251, `yundu` 847, `nyulu` 522, `bula` 318, `jana` 1023, `yaluy` 3222, `yinyay` 3514, `nyajin` 650.
- Exact duplicate preflight over the final 50 Kuku surfaces returned no accepted/revised/under-review collisions.
- Static guard target: exactly 50 hand-authored rows; sequence 1..50; one target per row; four words per Kuku sentence; bare nominative singular/third pronoun in slot 1; target noun in slot 2; bare `yaluy` or `yinyay` in slot 3; final `nyajin`; no loans; no denied Kuku forms; no denied English action/source-prose drift.

## Planned rows

1. `Ngayu ngawiya yaluy nyajin.`
2. `Ngayu ngujay yaluy nyajin.`
3. `Ngayu kuyu yaluy nyajin.`
4. `Ngayu yawu yaluy nyajin.`
5. `Ngayu judi yaluy nyajin.`
6. `Ngayu ngalkun yaluy nyajin.`
7. `Ngayu kubarr yaluy nyajin.`
8. `Ngayu kiju yaluy nyajin.`
9. `Ngayu wakal yaluy nyajin.`
10. `Ngayu julul yaluy nyajin.`
11. `Yundu ngawiya yinyay nyajin.`
12. `Yundu ngujay yinyay nyajin.`
13. `Yundu kuyu yinyay nyajin.`
14. `Yundu yawu yinyay nyajin.`
15. `Yundu judi yinyay nyajin.`
16. `Yundu ngalkun yinyay nyajin.`
17. `Yundu kubarr yinyay nyajin.`
18. `Yundu kiju yinyay nyajin.`
19. `Yundu wakal yinyay nyajin.`
20. `Yundu julul yinyay nyajin.`
21. `Nyulu ngawiya yaluy nyajin.`
22. `Nyulu ngujay yaluy nyajin.`
23. `Nyulu kuyu yaluy nyajin.`
24. `Nyulu yawu yaluy nyajin.`
25. `Nyulu judi yaluy nyajin.`
26. `Nyulu ngalkun yaluy nyajin.`
27. `Nyulu kubarr yaluy nyajin.`
28. `Nyulu kiju yaluy nyajin.`
29. `Nyulu wakal yaluy nyajin.`
30. `Nyulu julul yaluy nyajin.`
31. `Bula ngawiya yinyay nyajin.`
32. `Bula ngujay yinyay nyajin.`
33. `Bula kuyu yinyay nyajin.`
34. `Bula yawu yinyay nyajin.`
35. `Bula judi yinyay nyajin.`
36. `Bula ngalkun yinyay nyajin.`
37. `Bula kubarr yinyay nyajin.`
38. `Bula kiju yinyay nyajin.`
39. `Bula wakal yinyay nyajin.`
40. `Bula julul yinyay nyajin.`
41. `Jana ngawiya yaluy nyajin.`
42. `Jana ngujay yaluy nyajin.`
43. `Jana kuyu yaluy nyajin.`
44. `Jana yawu yaluy nyajin.`
45. `Jana judi yaluy nyajin.`
46. `Jana ngalkun yaluy nyajin.`
47. `Jana kubarr yaluy nyajin.`
48. `Jana kiju yaluy nyajin.`
49. `Jana wakal yaluy nyajin.`
50. `Jana julul yaluy nyajin.`

## Guardrails

- Keep all target labels as bare visible water-fauna nouns with the selected literal target senses only.
- Do not reopen collided `yuday`, `kulil`, or `nuwi` surfaces in this batch.
- Do not use shark/danger target `yaburr`, ray-alternate `badibu`, or any unsourced replacement label.
- Keep all subject pronouns as bare nominatives: no `nganya`, `yununy`, `nyunguny`, `bulangan`, `janangan`, or any dative/locative/possessive forms.
- Keep `yaluy`, `yinyay`, and `nyajin` uninflected; do not import nonpast `nyajil`, purposive `nyaji-nka`, reduplicated watching forms, hearing compounds, or perception compounds.
- Do not import catching, spearing, hunting, cooking, eating, bait, net, hook, danger, ecology, shore, reef, place, story, colour-property, target case, demonstrative case, compounds, productive reduplication, support inflection, source prose, or object-use predicates.
- English must remain literal: selected subject value, target label, here/there, and "saw" only.

## Execution checklist

- Compile `bank_338.py` and `close_338.py`; verify `bank_338.scan_static() == []`.
- Bank 50 explicit hand-authored rows as `under_review`.
- Run corpus lint before close.
- Read back all 50 rows from SQLite.
- Run exact duplicate scan.
- Close only after morphology, lexicon, syntax, fidelity, and register lenses pass.
- Record lessons and lexeme/source logs.
- Run post-close lint.
- Refresh export.
- Update the four living books.
- Render docs.
- Verify local rendered docs and live `https://mobtranslate.com/docs/`.
- Final lint and count audit.

## Closeout

- Static script checks passed:
  - `python3 -m py_compile batch_scripts/bank_338.py batch_scripts/close_338.py`
  - `bank_338.scan_static()` returned 0 static issues over 50 rows.
- Source and preflight checks passed:
  - `core-lexicon.yaml` lines 744-759 read back the final target set: `ngawiya`, `ngujay`, `kuyu`, `yawu`, `judi`, `ngalkun`, `kubarr`, `kiju`, `wakal`, and `julul`.
  - Grammar docs read back bare nominative `ngayu`, `yundu`, `nyulu`, `bula`, and `jana`; local `yaluy` and `yinyay`; and `nyaji-ny` / past `-ny` support for corpus-conventional `nyajin`.
  - Pre-bank DB check found Batch 338 absent, verified 16,947, under-review 0, and no existing matches for the 50 planned Kuku surfaces.
- Banking succeeded:
  - `python3 batch_scripts/bank_338.py`
  - Output: `banked batch-338: 50 rows under_review`.
  - DB readback after banking: 50 `under_review` rows, sequence 1..50; verified total remained 16,947 and under-review total was 50.
  - Initial process events were 3378-3383: source readback, past-counterpart scope, coverage audit, duplicate preflight, static guard pass, and bank success.
- Pre-close lint and row checks passed:
  - `python3 lint_corpus.py`
  - Output: `lint: 16997 rows scanned, 0 issues flagged`; goal metric remained 16,947 / 20,000 because Batch 338 was still under review.
  - Read back all 50 Batch 338 rows as `under_review`, sequence 1..50, matching the planned `nyajin` past Kuku surfaces.
  - Whole-corpus exact `lower(kuku)+lower(english)` duplicate scan returned 0 duplicate groups.
  - Row-readback and duplicate-scan checks were recorded as process events 3384 and 3385.
- Close succeeded:
  - `python3 batch_scripts/close_338.py`
  - Output: `closed batch-338: accepted=50, reviews=250, lessons=35, lexeme_logs=18, verified 16947->16997, kuku_words 123147->123347`.
- Post-close corpus checks passed:
  - `python3 lint_corpus.py`
  - Output: `lint: 16997 rows scanned, 0 issues flagged`; `GOAL METRIC: 16997 / 20000 verified sentences (123347 Kuku words)`.
  - DB audit: accepted/revised verified total 16,997; under_review 0; remaining to 20,000 = 3,003.
  - Batch 338 rows: 50 accepted rows, sequence 1..50.
  - Review rows: 250; lessons: 35; `lexeme_log` rows with action `batch-338-verify`: 18.
  - Exact duplicate scan: 0 duplicate groups.
- Export was refreshed:
  - `python3 export_training.py`
  - Output: 16,997 exported rows with train/dev/synthtest split 14,254 / 1,383 / 1,360.
  - Export file readback: `wc -l export/train.jsonl export/dev.jsonl export/synthtest.jsonl` = 14,254 / 1,383 / 1,360, total 16,997.
  - Export refresh was recorded as process event 3392.
- Living books were updated:
  - `reports/KUKU-YALANJI-CORPUS-OPERATOR-GUIDE.md`
  - `reports/SAMPLE-PRODUCTION-PAGES.md`
  - `reports/kuku-yalanji-mega-grammar-cheatsheet-2026-07-02.md`
  - `reports/kuku-yalanji-dictionary-errata-2026-07-02.md`
  - Source-book update was recorded as process event 3393.
- Render and live docs verification passed:
  - `./render-docs.sh` rendered all four HTML documents and wrote `public-docs/index.html`.
  - Render was recorded as process event 3394.
  - `https://mobtranslate.com/docs` returned HTTP 301 to `/docs/`.
  - `/docs/` returned HTTP 200 and linked all four `.html` documents plus all four raw `.md` documents.
  - `/docs/operator-guide.html`, `/docs/sample-pages.html`, `/docs/grammar-cheatsheet.html`, `/docs/dictionary-errata.html`, and their raw `.md` counterparts returned HTTP 200.
  - Live operator, sample, grammar, and errata docs contain Batch 338 / Rule 296 / 16,997 markers where expected.
  - Stale Batch 337 current-handoff markers were absent from live operator/sample docs.
  - Live-doc verification was recorded as process event 3395.
- Final audit passed:
  - `python3 lint_corpus.py` again returned 16,997 rows scanned, 0 issues flagged.
  - Final DB audit: verified 16,997; under_review 0; remaining 3,003; Kuku words 123,347.
  - Batch 338 process events were continuous from 3378 through 3396 at the time this closeout was written.
  - Final audit was recorded as process event 3396.

## Handoff

Continue from **16,997 / 20,000** verified sentences, with **3,003** remaining. Rule 297 must begin with a fresh source pass and must not infer fish action, turtle spearing, hunting, catching, cooking, eating, danger, ecology, target/pronoun/demonstrative case, target compounds, productive reduplication, perception compounds, nonpast/purposive/reduplicated perception, support inflection, or any carried weapon/tool/water/landform/sky/fire/fauna/body/dwelling trap from this batch. If the next batch continues the visible-object perception consolidation, write `bank_339.py` and `close_339.py`, run a new exact duplicate preflight, and record the source readback before banking.
