# Batch 281 - Rule 239 Process Log

Theme: dwelling and household construction consolidation after Rule 238.

Starting state:
- Verified sentences before batch: 14,097 / 20,000.
- Under review before batch: 0.
- Latest completed rule before this batch: Rule 238 / batch-280, dwelling and household reference expansion.
- Process ledger before banking: events complete through 2267.

Field audit:
- Cadence after a lexical batch favors construction consolidation over a new semantic field.
- Rule 239 therefore retains the exact ten Rule 238 dwelling/household target nouns and changes only the support
  frame.
- Directly repeating the ordinary post-lexical consolidation grid would collide with Batch 280 and with older
  artefact/clothing batches for `jakway`, `yulal`, and `bilangkurr`.
- Collision preflight found zero-collision bands for `Ngayu TARGET yinyay nyajil`, `Nyulu TARGET yaluy nyajil`,
  `Yurra TARGET yinyay nyajil`, `Bula TARGET yaluy nyajil`, and `Jana TARGET yinyay nyajil`.

Source basis:
- The target nouns remain the Rule 238 dictionary/grammar-backed entries: `bakarr` ridge pole, `bayan` house,
  `bira` windbreak, `jiji` roof, `kilili` windbreak, `wurun` humpy, `jakway` door, `yulal` board, `kararr`
  blanket, and `bilangkurr` blanket.
- Patz section 3.5 Table 3.6 sources the bare nominative pronouns `ngayu`, `nyulu`, `yurra`, `bula`, and `jana`.
- Patz section 3.7 sources `yaluy` "here" and `yinyay` "there"; the batch uses them bare.
- Patz section 3.8.3.2 sources `nyaji-l` "see" as an l-conjugation verb; the batch uses nonpast `nyajil` only.

Selected target heads:
- `bakarr` - ridge pole; no pole material, construction, or source claim.
- `bayan` - house; no camping, setting up, building, possession, locative house, or opium/particle/none homograph.
- `bira` - windbreak; no making, setting, rain, cold, or material-source claim.
- `jiji` - roof; no top-of-anything extension and no roofing-material prose.
- `kilili` - windbreak; no making, setting, weather, or material-source claim.
- `wurun` - humpy; no halfway translation, building, sleeping, rain shelter, or locative humpy row.
- `jakway` - door; no front sense and no opening, closing, or shutting predicate.
- `yulal` - board; no plank wording, round-stick contrast, nailing, or building predicate.
- `kararr` - blanket; no sheet, grass bedding, spreading, sleeping, covering, warming, or year-counting extension.
- `bilangkurr` - blanket; no clothing use, sleeping, covering, warming, or ownership row.

Planned frame grid:
- Rows 1-10: `Ngayu TARGET yinyay nyajil`.
- Rows 11-20: `Nyulu TARGET yaluy nyajil`.
- Rows 21-30: `Yurra TARGET yinyay nyajil`.
- Rows 31-40: `Bula TARGET yaluy nyajil`.
- Rows 41-50: `Jana TARGET yinyay nyajil`.

Preflight:
- Exact planned-surface collision scan is enforced inside `bank_281.py` before insert.
- External preflight over the 50 planned surfaces returned 0 accepted, revised, or under-review collisions.
- Token-boundary corpus coverage before banking: `bakarr` 5, `bayan` 442, `bira` 6, `jiji` 5, `kilili` 5,
  `wurun` 28, `jakway` 15, `yulal` 15, `kararr` 22, and `bilangkurr` 22 accepted/revised token hits.
- Static guards in `bank_281.py`: 50 explicit hand-authored rows; exactly one Rule 239 target noun per row; exactly
  one bare nominative pronoun per row; no loans; no target morphology; no excluded homograph/action/source-prose
  target drift; no recent fire/body drift; no pronoun case; no perception compound; five sourced frame bands only.

Closeout requirements:
- Run `python3 -m py_compile batch_scripts/bank_281.py batch_scripts/close_281.py`.
- Run `python3 batch_scripts/bank_281.py`.
- Run whole-corpus lint while rows are under review.
- Run `python3 batch_scripts/close_281.py` after five-lens review.
- Run whole-corpus lint again.
- Run `python3 export_training.py`.
- Update all living books with Rule 239 and rerender docs with `./render-docs.sh`.
- Verify `/docs`, `/docs/`, all four rendered HTML docs, and all four raw Markdown docs from `mobtranslate.com`.

Execution closeout:
- `python3 -m py_compile batch_scripts/bank_281.py batch_scripts/close_281.py` passed.
- `python3 batch_scripts/bank_281.py` banked 50 hand-authored Rule 239 rows as `under_review`.
- Under-review whole-corpus lint passed: 14,147 rows scanned, 0 issues flagged; verified total still 14,097 /
  20,000 before close, 111,747 Kuku words.
- Row readback confirmed the five planned bands exactly:
  `Ngayu TARGET yinyay nyajil`, `Nyulu TARGET yaluy nyajil`, `Yurra TARGET yinyay nyajil`,
  `Bula TARGET yaluy nyajil`, and `Jana TARGET yinyay nyajil`.
- `python3 batch_scripts/close_281.py` accepted 50 rows and inserted 250 five-lens review passes, 31 lessons,
  and 18 lexeme/source-log entries. Verified count moved 14,097 -> 14,147; Kuku words moved 111,747 -> 111,947.
- Post-close `python3 lint_corpus.py` passed: 14,147 rows scanned, 0 issues flagged; goal metric 14,147 /
  20,000 verified sentences.
- `python3 export_training.py` refreshed the export: 14,147 total rows; train 11,858, dev 1,147, synthtest
  1,142.
- Living books updated: operator guide, sample production pages, mega grammar cheatsheet, and dictionary errata now
  carry Batch 281 / Rule 239 state, traps, examples, lint/export counts, and the Rule 240 handoff.
- `./render-docs.sh` refreshed `public-docs/` rendered HTML and raw Markdown.
- Live docs verified with a browser User-Agent: `/docs` returns 301 to `/docs/`; `/docs/` returns 200; all four
  rendered HTML docs and all four raw Markdown docs return 200 and contain Batch 281 / Rule 239 markers.
- Process ledger complete through live-docs verification event 2284 before final process-log/final-audit events.
