homemaker-layout/AGENTS.md

103 lines
3.8 KiB
Markdown
Raw Normal View History

# Agent Instructions
This project uses **bd** (beads) for issue tracking. Run `bd prime` for full workflow context.
## Quick Reference
```bash
bd ready # Find available work
bd show <id> # View issue details
bd update <id> --claim # Claim work atomically
bd close <id> # Complete work
bd dolt push # Push beads data to remote
```
## Non-Interactive Shell Commands
**ALWAYS use non-interactive flags** with file operations to avoid hanging on confirmation prompts.
Shell commands like `cp`, `mv`, and `rm` may be aliased to include `-i` (interactive) mode on some systems, causing the agent to hang indefinitely waiting for y/n input.
**Use these forms instead:**
```bash
# Force overwrite without prompting
cp -f source dest # NOT: cp source dest
mv -f source dest # NOT: mv source dest
rm -f file # NOT: rm file
# For recursive operations
rm -rf directory # NOT: rm -r directory
cp -rf source dest # NOT: cp -r source dest
```
**Other commands that may prompt:**
- `scp` - use `-o BatchMode=yes` for non-interactive
- `ssh` - use `-o BatchMode=yes` to fail instead of prompting
- `apt-get` - use `-y` flag
- `brew` - use `HOMEBREW_NO_AUTO_UPDATE=1` env var
<!-- BEGIN BEADS INTEGRATION v:1 profile:minimal hash:ca08a54f -->
## Beads Issue Tracker
This project uses **bd (beads)** for issue tracking. Run `bd prime` to see full workflow context and commands.
### Quick Reference
```bash
bd ready # Find available work
bd show <id> # View issue details
bd update <id> --claim # Claim work
bd close <id> # Complete work
```
### Rules
- Use `bd` for ALL task tracking — do NOT use TodoWrite, TaskCreate, or markdown TODO lists
- Run `bd prime` for detailed command reference and session close protocol
- Use `bd remember` for persistent knowledge — do NOT use MEMORY.md files
§39.4 completion + §39.5 retraction + §39.6: the usage namespace is NOT clean Answering "are we clean". Generic namespace: yes. Usage namespace: no. FINISH §39.4. The first sweep missed sites, found by a full re-grep: graph.py's free-area budget, operators.py host-preference / keep-type / repair-candidate, fitness.py's ("l","c","k") public-access test, bubble.py's generic adjacency reference, and -- the important one -- cpsat.py, which was still matching adjacency by raw startswith. graph.code_matches_requirement is now the single public answer to "does this leaf count as the thing the programme asked to be next to", shared by has_adjacency, has_vertical_connection and cpsat. RETRACT §39.5. It concluded 2g7.5's CP-SAT seeder win did not survive the correction. That was wrong. The cause was the missed cpsat matcher above: the exact solver was optimising a different relation than the scorer checked, so a failing test reporting an incomplete sweep was misread as a baseline shift. Re-measured over 6 seeds, cpsat now wins on both programmes (harbor 102/92, maple 156/154). xfail removed. REAL BUG UNDERNEATH: CP-SAT was never deterministic despite num_search_workers=1 and a comment claiming it. neighbors[slot] is a set of dom.Node, which hashes by id() -- a memory address -- so raw iteration made the model-build order vary and CP-SAT returned a different equally-optimal assignment each run (measured 194/180/171/182 over four identical aggregates). sorted() on the slot indices fixes it. Also paired the wall-clock cap with max_deterministic_time (solves run ~124ms against a 2s cap, so nothing was timing out -- latent hazard, not the cause). solve_room_labels is now reproducible on every captured instance; constructive_topology on the cpsat path still is not, filed as homemaker-py-fdp (plausible contributor to b8g). §39.6 THE SECOND NAMESPACE. Usage prefixes b/t/l/k (bedroom/toilet/living/ kitchen) classify programme codes by first letter and stay prefix-based by design, but they are not inert: has_circulation deletes graph edges from them. Four corpus rooms are misclassified by spelling -- la1 "Laundry Room" and li1 "Library Corner" as living, br1 "Staff Room" as bedroom, tr1 "Treatment Room" as toilet. Measured on a health-centre seed: tr1 loses its edge to the adjacent O, br1 loses its edge to t10 "Staff WC" -- both feed the connectivity fails §38 found persisting. Filed homemaker-py-sel; an explicit usage: key is the fix, but it changes fitness for correctly-spelled programmes too so it needs its own A/B. DOCS. README gains a "Room codes and reserved names" section; CLAUDE.md and AGENTS.md gain the same summary for agents. audit_programme_config.py now reports the usage class each code picks up alongside the namespace and satisfiability checks. DESIGN §37.2's note calling the c/o/s quirk "existing product behaviour, not a bug" is annotated as superseded. Corpus audit: zero generic-namespace violations across all ten example programmes. 346 passed, same 7 pre-existing fixture failures, lint unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 10:09:14 +00:00
### Room-code namespaces (DESIGN.md §39.4/§39.6)
Leaf types share a first character across three namespaces:
- **`C` / `O` / `S`** — generic structural types (circulation / outside / sahn),
uppercase, reserved. A programme code spelled exactly one of these is rejected
at load.
- **programme room codes** — lowercase, may start with *any* letter. The generic
tests match `C`/`O`/`S` exactly, so `cr1` is a room, not circulation.
- **usage prefixes `b`/`t`/`l`/`k`** — bedroom / toilet / living / kitchen,
still matched by first letter *by design*. `graph.has_circulation` strips graph
edges from them, so a code beginning with one inherits that room's
connectivity rules whether or not intended (`homemaker-py-sel`).
When adding or editing a programme, run
`python experiments/audit_programme_config.py` — it reports reserved-name
collisions, the usage class each code picks up, and per-room-spec satisfiability.
## Session Completion
**When ending a work session**, you MUST complete ALL steps below. Work is NOT complete until `git push` succeeds.
**MANDATORY WORKFLOW:**
1. **File issues for remaining work** - Create issues for anything that needs follow-up
2. **Run quality gates** (if code changed) - Tests, linters, builds
3. **Update issue status** - Close finished work, update in-progress items
4. **PUSH TO REMOTE** - This is MANDATORY:
```bash
git pull --rebase
bd dolt push
git push
git status # MUST show "up to date with origin"
```
5. **Clean up** - Clear stashes, prune remote branches
6. **Verify** - All changes committed AND pushed
7. **Hand off** - Provide context for next session
**CRITICAL RULES:**
- Work is NOT complete until `git push` succeeds
- NEVER stop before pushing - that leaves work stranded locally
- NEVER say "ready to push when you are" - YOU must push
- If push fails, resolve and retry until it succeeds
<!-- END BEADS INTEGRATION -->