nav-descend
Attempt exactly ONE controlled descent forward into an adjacent lower cell. Covers stepping down slopes, edges, and shallow drops (≤ 1 block).
Input
step_duration: Float seconds for the move (default: 0.25)
max_drop: Float maximum allowed drop in Y (default: 1.2)
min_drop: Float minimum Y decrease to count as descend (default: 0.2)
Output
Success (status: "success"):
value: Summary text
extra.from: Starting position {x, y, z}
extra.to: Ending position {x, y, z}
extra.delta_y: Vertical displacement (negative, within bounds)
extra.support_here: Support type at destination
Failure (status: "failed"):
reason: One of "status_failed", "move_failed", "collision", "observation_failed", "support_ambiguous", "no_descent", "excessive_drop"
Invariants
- Automatically aligns agent to block center and cardinal yaw before descent attempt
- Exactly one descent attempt per call (always forward, relative to current yaw)
- Descent must be within bounds:
min_drop ≤ |delta_y| ≤ max_drop
- Landing support must be walkable ("solid" or "unsafe")
- Snaps to block center after any position change
- Updates
world_state("nav") history
Alignment
Before descent attempt, agent is automatically aligned:
- Position: Block center (x+0.5, y, z+0.5) - eliminates fractional offsets
- Yaw: Nearest cardinal (0°=South, 90°=West, 180°=North, 270°=East)
- Pitch: 0°
This prevents collisions from fractional offsets and ensures predictable forward direction.
Planning Notes
- Does not handle multi-block drops; compose multiple calls for that
- Use
nav-turn before descending to change direction (yaw determines forward direction)
- Alignment to block center and cardinal yaw happens automatically (no manual alignment needed)
- Falls within bounds are treated as controlled descent (success if landing is safe)
Example Workflow
{"type":"nav-turn","direction":"left","out":"$t"}
{"type":"nav-descend","out":"$d1"}
{"type":"nav-descend","out":"$d2"}
1---2name: nav-descend3description: Attempt exactly ONE controlled descent forward into an adjacent lower cell. Covers stepping down slopes, edges, and shallow drops (≤ 1 block).4---56# nav-descend78Attempt exactly ONE controlled descent forward into an adjacent lower cell. Covers stepping down slopes, edges, and shallow drops (≤ 1 block).910## Input1112- `step_duration`: Float seconds for the move (default: `0.25`)13- `max_drop`: Float maximum allowed drop in Y (default: `1.2`)14- `min_drop`: Float minimum Y decrease to count as descend (default: `0.2`)1516## Output1718Success (`status: "success"`):19- `value`: Summary text20- `extra.from`: Starting position `{x, y, z}`21- `extra.to`: Ending position `{x, y, z}`22- `extra.delta_y`: Vertical displacement (negative, within bounds)23- `extra.support_here`: Support type at destination2425Failure (`status: "failed"`):26- `reason`: One of `"status_failed"`, `"move_failed"`, `"collision"`, `"observation_failed"`, `"support_ambiguous"`, `"no_descent"`, `"excessive_drop"`2728## Invariants2930- Automatically aligns agent to block center and cardinal yaw before descent attempt31- Exactly one descent attempt per call (always forward, relative to current yaw)32- Descent must be within bounds: `min_drop` ≤ `|delta_y|` ≤ `max_drop`33- Landing support must be walkable ("solid" or "unsafe")34- Snaps to block center after any position change35- Updates `world_state("nav")` history3637## Alignment3839Before descent attempt, agent is automatically aligned:40- Position: Block center (x+0.5, y, z+0.5) - eliminates fractional offsets41- Yaw: Nearest cardinal (0°=South, 90°=West, 180°=North, 270°=East)42- Pitch: 0°4344This prevents collisions from fractional offsets and ensures predictable forward direction.4546## Planning Notes4748- Does not handle multi-block drops; compose multiple calls for that49- Use `nav-turn` before descending to change direction (yaw determines forward direction)50- Alignment to block center and cardinal yaw happens automatically (no manual alignment needed)51- Falls within bounds are treated as controlled descent (success if landing is safe)5253## Example Workflow5455```json56{"type":"nav-turn","direction":"left","out":"$t"}57{"type":"nav-descend","out":"$d1"}58{"type":"nav-descend","out":"$d2"}59```