LazyBoy2/docs/CORE-GAPS.md

39 lines
2.1 KiB
Markdown

# Core gaps vs Grok Bot usability (LazyBoy2 / GrokBoy)
Living checklist for the four product cores. Update when behavior changes.
| Core | Status | Notes |
|------|--------|-------|
| 1 Completion contract | **Present** | `send_message`-only voice; ack ≠ delivery; Waiting + revival; silence / deliver-then-yield reminders |
| 2 Path ladder | **Hardened** | Prompt section + runtime gate: `spawn_subagent kind=computerUse` requires prior `web_fetch` / `web_search` / `browser_*` / `call_mcp_tool` this turn, or `force=true` for native GUI |
| 3 Human collaboration | **Present + tightened** | `browser_handoff` / `request_box_help` on shared Chrome profile; prompt requires re-observe after human returns |
| 4 Stable single box | **Mostly present** | Docker box + `/home/box/chrome-profile`; SingletonLock/flock in box runtime — keep health/docs polished |
## Path ladder (runtime)
Implemented in `ToolContext::surfaces_used` + `Subagents::spawn(..., force)`:
- Successful tool calls (except meta/control) record a surface name.
- `tried_web_ladder()` is true after any of: `web_fetch`, `web_search`, `browser_*`, `call_mcp_tool`.
- `computerUse` without ladder and without `force` returns a clear error.
## Still soft / follow-ups
- Ladder is turn-scoped (shared Arc with children) — not persisted across Waiting revivals unless the same `ToolContext` is reused.
- Parent can still call `screenshot` without DOM first (read-only; intentional).
- No automatic “browser_* failed → suggest force” helper beyond the error string.
- Box health / profile wipe recovery UX can still be clearer in `PRODUCT.md` / CLI.
## Verify
```bash
cargo test -p grokboy-core path_ladder -- --nocapture
cargo test -p grokboy-core computer_use_spawn -- --nocapture
cargo test -p grokboy-core agent_system -- --nocapture
```
## Peer mail vs human steering (2026-09-15)
Owner `send_message(task_id=…)` peer FYI used to be merged into `steering` and set `skip_all`, cancelling the worker's already-planned tool batch (`not executed: new input or cancellation arrived`). Fix: only InputBroker / human steering aborts a batch; peer mail is injected after tools (or at round start) as data.