agent: builder model: sonnet max_turns: 110 budget_usd: 20 —

Brief: #867 part 2, the Seeds tables and their type queries move to tools/emit_seeds.nika

Score: self-hosting lane (docs/priorities.md, E11-4b part 2): about 130 Rust lines of emit/seeds.rs (623 left after part 1, 38697bf). One step, so done is reachable; the reader walks (read_with, read_barriers, hands, self_handers, count_types, lines 94-495) are the next brief, not this one.

Facts

Part 1 moved the writer: EmitSeedsPlace, emit_seeds_write in crates/nikaia-std/src/tools/emit_seeds.nika; Seeds::write (seeds.rs:617) passes arity as a callback. What stays Rust in crates/nikaia/src/emit/seeds.rs:

To build

  1. A Nikaia struct EmitSeedsTables in emit_seeds.nika holds every field of Seeds except shapes (stays Rust until the reader moves: Shape is the ledger’s). Rust Seeds holds it as one field (tables), the reader fills it through it. The leaves and the queries above, except shape, become impl EmitSeedsTables methods / emit_seeds_* functions in Nikaia; a ref Type with a ParsedView (tools/parsed_view.nika, pattern check_items.nika:745 item_held_inline) or words: ref winnow_grammar::InternerContext for the name. Seeds’ public methods stay as one-line adapters so the 13 callers outside seeds.rs (emit/host.rs, emit/mod.rs, contracts/maps.rs) are unchanged. emit_seeds_write takes ref EmitSeedsTables instead of the arity callback if that is now simpler.
  2. Output of lower-std unchanged outside emit_seeds.rs/lowered.rs. Update the scripts/self_hosting.py row and the Seeds line of docs/selfhosting-plan.md (what is left: the reader walks). Commit Part of #867. rs2nika draft first (crates/rs2nika/convert, --profile emit --prefix emit_seeds_), report rs2nika: kept N of M in the commit message. A new method on an existing .nika needs no extra lower-std before cargo build. Tests: none new unless a defect is met (then a tests/compiler/ test, own commit). Run cargo test --profile fast -p nikaia --test it -- seeds maps sysroot, nikaia test --both-settings --project tests/compiler.

Rules (CLAUDE.md; this block is pasted into every brief, also a fix-forward)

Report (at most 15 lines, to exactly /home/user/Nikaia/docs/briefs/b867-seeds-tables.md.report.md)

Fields of docs/architect.md, Briefs and reports: Result: done|noop|partial|blocked (the bare word first; Owner: is a question for the owner or none, never a role), Files, Commit, Fixes, Pushed, Tests, Gate (green|red), Deviation, Found, Needs, Changelog, Owner, Disk freed. none where nothing, and then the bare word: Deviation: none (a note) cuts the batch (batch.nika compares exactly); a note goes into the commit message. Found: is only for a defect outside your change (it cuts the batch); how you solved your own step goes into the commit message. Deviation: is only a step of the brief built otherwise than written or not built; how you verified (e.g. a test not run against the unfixed compiler) goes under Tests:. A noop says why under Tests: (what was probed), not under Deviation:. Final answer, one line: done <sha>, report <path> (or BLOCKED: ... / PUSH REJECTED ...).

Attribution: Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com Claude-Session: https://claude.ai/code/session_01GFeMqxRbtUMiGVyDMxsvEq

This site is open source. Improve this page.