# Verifying Placement

> Confirms from one RGB-D view that a released object went through an aperture, accepting either that it vanished into the container or that its visible centre lies below the rim within the opening's footprint, and routing not_placed when it is still visible above or beside the aperture. Use when an insertion-and-release must be checked without simulator state, after the release has completed.

- Skill: `graph-robots/verifying-placement` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add graph-robots/verifying-placement`
- Raw SKILL.md: https://api.skillmd.com/api/skills/graph-robots/verifying-placement/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: graph-robots (https://skillmd.com/u/graph-robots)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/graph-robots/verifying-placement

---


# verifying-placement

Use once, after `executing-feature-mating` has released the object. Take a
fresh observation and call `verify_placement` with the aperture the fixture
perception measured (`aperture_center`, `rim_z`).

The script segments `object_description` in `camera_name`. Below
`score_min` the object is taken to have disappeared into the container,
which is `verified`. Otherwise its mask is back-projected and the median
must lie more than `depth_margin_m` below `rim_z` and within
`xy_tolerance_m` of the aperture centre in XY; anything else, including a
mask with fewer than `min_points` valid depth points, routes `not_placed`
with the evidence spelled out. The script never raises on a verdict.

## Boundaries

- Only meaningful for an opaque container after a completed release; an
  object still in the gripper would also "disappear" from an overhead view.
- No simulator query or object pose is read.

