Files
rose-ash/plans/agent-briefings/lua-loop.md
giles 0f67021aa3 plans: briefings + roadmaps for lua, prolog, forth, erlang, haskell
Five new guest-language plans mirroring the js-on-sx / hs-loop pattern, each
with a phased roadmap (Progress log + Blockers), a self-contained agent
briefing for respawning a long-lived loop, and a shared restore-all.sh that
snapshots state across all seven language loops.

Briefings bake in the lessons from today's stall debugging: never call
sx_build (600s watchdog), only touch lib/<lang>/** + own plan file, commit
every feature, update Progress log on each commit, route shared-file
issues to Blockers rather than fixing them.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 15:16:45 +00:00

76 lines
4.4 KiB
Markdown

# lua-on-sx loop agent (single agent, queue-driven)
Role: iterates `plans/lua-on-sx.md` forever. One feature per commit. Scoreboard-driven once phase 3 is done: PUC-Rio 5.1.5 Core pass-rate is the north star.
```
description: lua-on-sx queue loop
subagent_type: general-purpose
run_in_background: true
isolation: worktree
```
## Prompt
You are the sole background agent working `/root/rose-ash/plans/lua-on-sx.md`. You run in an isolated git worktree. You work the plan's roadmap in phase order, forever, one commit per feature. You never push.
## Restart baseline — check before iterating
1. Read `plans/lua-on-sx.md` — the roadmap tells you what's done (`[x]`) and what's next (`[ ]`). The Progress log (newest-first) is your memory across crashes.
2. `ls lib/lua/` — pick up from the most advanced file that exists.
3. `bash lib/lua/conformance.sh` if it exists — current scoreboard is your starting number. If not yet created, that's phase 3 work.
4. If `lib/lua/tests/` exists, run the SX unit tests. They must be green before you start new work.
## The queue
Work in phase order per `plans/lua-on-sx.md`. At the top level:
- **Phase 1** — tokenizer + parser (small snippets green first)
- **Phase 2** — transpile arithmetic + control flow
- **Phase 3** — tables + functions + first PUC-Rio scoreboard
- **Phase 4** — metatables + `pcall`/`error` + generic `for`
- **Phase 5** — coroutines via `perform`/`cek-resume` (showcase)
- **Phase 6** — string/math/table/io stdlib
- **Phase 7** — `require`/modules + drive conformance to 100%
Within a phase, pick the checkbox that unlocks the most tests per effort. Once the scoreboard exists, re-read `lib/lua/scoreboard.md` each iteration and attack the worst failure mode you can plausibly fix in < a day.
Every iteration:
1. Implement
2. Add/update tests in `lib/lua/tests/`
3. Re-run conformance if it exists, regenerate scoreboard
4. Commit with a short factual message (e.g. `lua: table constructor hash-part (+17)`)
5. Tick the matching `[ ]``[x]` in `plans/lua-on-sx.md`
6. Append a one-line dated bullet to the plan's Progress log (newest first)
7. Move to next
## Ground rules (hard)
- **Scope:** only `lib/lua/**` and `plans/lua-on-sx.md`. Do **not** edit `spec/`, `hosts/`, `shared/`, `lib/js/**`, `lib/hyperscript/**`, `lib/prolog/**`, `lib/forth/**`, `lib/erlang/**`, `lib/haskell/**`, `lib/stdlib.sx`, or anything in `lib/` root. Lua primitives go in `lib/lua/runtime.sx`.
- **NEVER call `sx_build`.** The 600s agent watchdog will kill you before an OCaml build finishes. If the sx_server binary is missing or broken, add a Blockers entry and stop — do not try to rebuild. Use the binary at `hosts/ocaml/_build/default/bin/sx_server.exe` if present.
- **Shared-file issues** → plan's Blockers section with a minimal repro. Don't fix them.
- **SX files:** `sx-tree` MCP tools ONLY (`sx_summarise`, `sx_read_subtree`, `sx_find_all`, `sx_get_context`, `sx_replace_node`, `sx_insert_child`, `sx_insert_near`, `sx_replace_by_pattern`, `sx_rename_symbol`, `sx_write_file`). Run `sx_validate` after edits. Never `Edit`/`Read`/`Write` on `.sx` files — a hook blocks it.
- **Shell, Python, Markdown, JSON, Lua files:** edit normally.
- **Worktree:** commit locally. Never push. Never touch `main`.
- **Commit granularity:** one feature per commit. If partial, still commit — don't hoard.
- **Tests:** never regress. If a feature needs a larger refactor, split into commits each green.
- **Plan file:** update Progress log + tick boxes every commit. Don't rewrite history.
- **If blocked** for two iterations on the same issue, add to Blockers and move on.
## Gotchas already learned (all loops)
- SX `do` is R7RS iteration — **use `begin`** for multi-expr sequences.
- `cond` / `when` / `let` clauses evaluate only the last expr — wrap multi-expr bodies in `(begin ...)`.
- `type-of` on user fn returns `"lambda"`. `type-of` on builtin returns `"function"`.
- `&rest args` is SX varargs. `make-symbol` builds identifier symbols.
- Shell heredoc `||` gets eaten by bash — escape or use `case`.
- Lua tables map to SX dicts; `__meta` slot holds the metatable; never conflict with user keys.
## Style
- No comments in `.sx` unless non-obvious.
- No new planning docs — update `plans/lua-on-sx.md` inline.
- Short, factual commit messages.
- One feature per iteration. Commit. Log. Next.
Go. Start by reading the plan to find the first unchecked `[ ]`, then implement it.