Skip to content

feat(atomic-actions): add verified effect-aware runtime - #495

Merged
yuecideng merged 35 commits into
mainfrom
feat/atomic-action-verified-runtime
Aug 21, 2026
Merged

feat(atomic-actions): add verified effect-aware runtime#495
yuecideng merged 35 commits into
mainfrom
feat/atomic-action-verified-runtime

Conversation

@yuecideng

@yuecidengyuecideng commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Description

Stack

Consolidation

Consolidates #493 and #494 into this layer. Scope: row-local lifecycle, physical-effect monitors, and the verified atomic-action runtime.
Complete the typed verified-action runtime with physical effect requirements, stable held-object and articulation state, effect-aware plans, and the reusable OperateArticulation primitive.

Pick, Place, coordinated manipulation, HandOver, and articulation operations now expose explicit terminal effect boundaries and row-local state deltas. Verification observes real physics; it never creates synthetic attachments or teleports task objects.

Refs #471
Refs #474

Type of change

  • New feature (non-breaking change which adds functionality)

Screenshots

Not applicable.

Validation

  • Focused coverage: tests/sim/atomic_actions, including articulation effects and per-environment execution
  • Final affected-suite regression on the stack tip: 1215 passed, 2 skipped, 8 deselected
  • Changed Python files pass Black 26.3.1; the Sphinx build and rollout-report drift check pass at the stack tip

Checklist

  • Changed Python files pass Black 26.3.1.
  • Corresponding public/design documentation is included in this stack.
  • Tests cover the affected behavior.
  • No dependency update is required.

@yuecidengyuecideng added atomic action atomic action related functionality enhancement New feature or request labels Aug 11, 2026
@yuecideng
yuecideng marked this pull request as ready for review August 11, 2026 16:46
CopilotAI lite review requested due to automatic review settings August 11, 2026 16:46
@greptile-apps

greptile-appsBot commented Aug 11, 2026

Copy link
Copy Markdown

Greptile Summary

The PR adds an effect-aware atomic-action runtime with row-local verification, eligibility, state updates, and recovery behavior.

  • Adds correlated effect-verification requests and partial per-environment results.
  • Preserves stable held-object and articulation state across execution boundaries.
  • Extends Pick, Place, semantic runtime, documentation, and tests for effect-aware execution.
  • Replaces the proposed articulation-specific operation with the existing open-loop Slide primitive and application-level verification.

Confidence Score: 5/5

The PR appears safe to merge because no blocking failure remains from the previously reported issues.

No blocking failure remains.

Important Files Changed

FilenameOverview
embodichain/lab/sim/atomic_actions/execution.pyAdds correlated, deadline-aware, row-local effect verification and state commitment to execution sessions.
embodichain/lab/sim/atomic_actions/runner.pyIntegrates synchronous and asynchronous effect results with runner scheduling, eligibility changes, and safe-stop behavior.
embodichain/lab/sim/atomic_actions/effects.pyExtends row-local state-delta handling while preserving stable held-object identity and metadata.
embodichain/lab/sim/skills/runtime.pyCarries verified task state and eligible environment cohorts across semantic-call boundaries.
embodichain/lab/sim/atomic_actions/primitives/pick_up.pyNarrows semantic-object dependency monitoring to the reversible approach phase.
embodichain/lab/sim/atomic_actions/primitives/place.pyDeclares terminal physical-effect verification and verified release-state updates for placement.
embodichain/lab/sim/objects/articulation.pyAdds stable articulation-state support used by effect-aware execution.
docs/source/api_reference/embodichain/embodichain.lab.sim.atomic_actions.rstDocuments the new effect-verification request, result, requirement, and plan-attempt contracts.

Sequence Diagram

sequenceDiagram
participant App
participant Runner as ExecutionRunner
participant Session as ExecutionSession
participant Physics as Simulation/Physics
participant Verifier as Effect Verifier
App->>Runner: step()
Runner->>Session: tick(fresh observation)
Session->>Physics: dispatch active-row command
Physics-->>Runner: updated observation
Session-->>Runner: EffectVerificationRequest
Runner->>Verifier: verify(context, request)
Verifier-->>Runner: EffectVerificationResult
Runner->>Session: tick(correlated result)
Session->>Session: commit successful row deltas
Session->>Session: retain unresolved rows
Session-->>App: completed, pending, or recovery status
Loading

Reviews (6): Last reviewed commit: "wip" | Re-trigger Greptile

Comment threadembodichain/lab/sim/atomic_actions/primitives/operate_articulation.py Outdated
Comment threadembodichain/lab/sim/atomic_actions/primitives/operate_articulation.py Outdated
Comment on lines +261 to +264
"ObjectSemantics",
"OPEN_COMMAND",
"ObservationProvider",
"ObservedArticulationJointState",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2Public runtime APIs lack documentation

The package now publicly exports the articulation operation and related verification, diagnostics, and state APIs without documenting their construction, observation-provider requirements, effect lifecycle, or recovery semantics, contrary to the repository requirement to document public API changes.

Context Used: AGENTS.md (source)

Prompt To Fix With AI
This is a comment left during a code review.
Path: embodichain/lab/sim/atomic_actions/__init__.py
Line: 261-264
Comment:
**Public runtime APIs lack documentation**
The package now publicly exports the articulation operation and related verification, diagnostics, and state APIs without documenting their construction, observation-provider requirements, effect lifecycle, or recovery semantics, contrary to the repository requirement to document public API changes.
**Context Used:** AGENTS.md ([source](https://github.com/dexforce/embodichain/blob/main/AGENTS.md))
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Fix in CodexFix in Claude Code

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@yuecideng
yuecideng changed the base branch from feat/semantic-effect-monitors to feat/semantic-skill-compilerAugust 11, 2026 17:47
@yuecidengyuecideng changed the title feat(atomic-actions): complete verified action runtimefeat(atomic-actions): add verified effect-aware runtimeAug 11, 2026
Make endpoint bindings, timed command frames, transports, routing, safe holds, and profile lowering controller-agnostic. Preserve joint trajectories as optional feedback artifacts and add staged, same-address invocation revision semantics for mobile and whole-body safety.
…2c-runtime-endpoints
# Conflicts:
#	docs/design/declarative_expert_program_plan.md
#	embodichain/lab/sim/atomic_actions/primitives/coordinated_pickment.py
#	embodichain/lab/sim/atomic_actions/primitives/coordinated_placement.py
#	embodichain/lab/sim/atomic_actions/primitives/hand_over.py
#	embodichain/lab/sim/atomic_actions/primitives/move_end_effector.py
#	embodichain/lab/sim/atomic_actions/primitives/move_held_object.py
#	embodichain/lab/sim/atomic_actions/primitives/move_joints.py
#	embodichain/lab/sim/atomic_actions/primitives/pick_up.py
#	embodichain/lab/sim/atomic_actions/primitives/place.py
#	embodichain/lab/sim/atomic_actions/primitives/press.py
#	embodichain/lab/sim/skills/profiles.py
#	scripts/tutorials/atomic_action/assemble.py
#	scripts/tutorials/atomic_action/coordinated_pickment.py
#	scripts/tutorials/atomic_action/coordinated_placement.py
#	scripts/tutorials/atomic_action/hand_over.py
#	scripts/tutorials/atomic_action/move_end_effector.py
#	scripts/tutorials/atomic_action/move_held_object.py
#	scripts/tutorials/atomic_action/move_joints.py
#	scripts/tutorials/atomic_action/place.py
#	scripts/tutorials/atomic_action/press.py
Remove fallback control periods from motion policies and the atomic action engine. Require planners and custom actions to provide validated timing, propagate explicit interpolation cadence through planning contexts, and update built-ins, tasks, benchmarks, tutorials, docs, and tests.
BREAKING CHANGE: planner results with positions must include dt and duration, custom atomic actions must return TimedTrajectory, and fallback_control_dt is removed.
…pr2c-runtime-endpoints
# Conflicts:
#	agent_context/topics/atomic-actions/atomic-actions.md
#	docs/source/overview/sim/atomic_actions/builtin_actions.md
#	docs/source/overview/sim/atomic_actions/index.md
#	docs/source/tutorial/atomic_actions.rst
#	embodichain/lab/sim/atomic_actions/execution.py
#	scripts/tutorials/atomic_action/dynamic_obstacle_recovery.py
#	tests/sim/atomic_actions/test_core.py
#	tests/sim/atomic_actions/test_engine.py
#	tests/sim/atomic_actions/test_runner.py
…2c-runtime-endpoints
# Conflicts:
#	agent_context/topics/atomic-actions/atomic-actions.md
#	agent_context/topics/motion-planning/motion-planning.md
#	docs/design/declarative_expert_program_plan.md
#	docs/source/overview/sim/atomic_actions/builtin_actions.md
#	docs/source/overview/sim/atomic_actions/index.md
#	docs/source/overview/sim/planners/motion_generator.md
#	docs/source/tutorial/atomic_actions.rst
#	docs/source/tutorial/motion_gen.rst
#	embodichain/lab/sim/atomic_actions/core.py
#	embodichain/lab/sim/atomic_actions/execution.py
#	embodichain/lab/sim/atomic_actions/policies.py
#	embodichain/lab/sim/atomic_actions/primitives/coordinated_pickment.py
#	embodichain/lab/sim/atomic_actions/primitives/coordinated_placement.py
#	embodichain/lab/sim/atomic_actions/primitives/hand_over.py
#	embodichain/lab/sim/atomic_actions/primitives/move_end_effector.py
#	embodichain/lab/sim/atomic_actions/primitives/move_held_object.py
#	embodichain/lab/sim/atomic_actions/primitives/move_joints.py
#	embodichain/lab/sim/atomic_actions/primitives/pick_up.py
#	embodichain/lab/sim/atomic_actions/primitives/place.py
#	embodichain/lab/sim/atomic_actions/primitives/press.py
#	embodichain/lab/sim/planners/base_planner.py
#	embodichain/lab/sim/planners/motion_generator.py
#	embodichain/lab/sim/planners/neural_planner.py
#	embodichain/lab/sim/planners/utils.py
#	scripts/benchmark/atomic_action/press_benchmark.py
#	scripts/benchmark/motion_generation/planners/ik_interpolate.py
#	scripts/tutorials/atomic_action/control_dt.py
#	scripts/tutorials/atomic_action/dynamic_obstacle_recovery.py
#	scripts/tutorials/atomic_action/press.py
#	tests/benchmark/motion_generation/test_motion_generation_benchmark.py
#	tests/sim/atomic_actions/test_actions.py
#	tests/sim/atomic_actions/test_core.py
#	tests/sim/atomic_actions/test_engine.py
#	tests/sim/atomic_actions/test_runner.py
#	tests/sim/planners/test_motion_generator_batched.py
#	tests/sim/planners/test_plan_state_batched.py
…mantic-skill-compiler
# Conflicts:
#	agent_context/MAP.yaml
#	agent_context/topics/atomic-actions/atomic-actions.md
#	agent_context/topics/motion-planning/motion-planning.md
#	docs/design/declarative_expert_program_plan.md
#	docs/source/overview/sim/atomic_actions/builtin_actions.md
#	docs/source/overview/sim/atomic_actions/index.md
#	docs/source/overview/sim/atomic_actions/robot_skill_profiles.md
#	docs/source/tutorial/atomic_actions.rst
#	embodichain/lab/sim/atomic_actions/__init__.py
#	embodichain/lab/sim/atomic_actions/affordance.py
#	embodichain/lab/sim/atomic_actions/bindings.py
#	embodichain/lab/sim/atomic_actions/core.py
#	embodichain/lab/sim/atomic_actions/effects.py
#	embodichain/lab/sim/atomic_actions/engine.py
#	embodichain/lab/sim/atomic_actions/execution.py
#	embodichain/lab/sim/atomic_actions/plans.py
#	embodichain/lab/sim/atomic_actions/primitives/coordinated_pickment.py
#	embodichain/lab/sim/atomic_actions/primitives/coordinated_placement.py
#	embodichain/lab/sim/atomic_actions/primitives/hand_over.py
#	embodichain/lab/sim/atomic_actions/primitives/move_end_effector.py
#	embodichain/lab/sim/atomic_actions/primitives/move_held_object.py
#	embodichain/lab/sim/atomic_actions/primitives/move_joints.py
#	embodichain/lab/sim/atomic_actions/primitives/pick_up.py
#	embodichain/lab/sim/atomic_actions/primitives/place.py
#	embodichain/lab/sim/atomic_actions/primitives/press.py
#	embodichain/lab/sim/atomic_actions/state.py
#	embodichain/lab/sim/planners/base_planner.py
#	embodichain/lab/sim/planners/curobo/curobo_planner.py
#	embodichain/lab/sim/planners/curobo/curobo_yaml.py
#	embodichain/lab/sim/planners/motion_generator.py
#	embodichain/lab/sim/skills/__init__.py
#	embodichain/lab/sim/skills/profiles.py
#	embodichain/lab/sim/skills/scene.py
#	scripts/benchmark/atomic_action/press_benchmark.py
#	scripts/tutorials/atomic_action/assemble.py
#	scripts/tutorials/atomic_action/coordinated_pickment.py
#	scripts/tutorials/atomic_action/coordinated_placement.py
#	scripts/tutorials/atomic_action/dynamic_obstacle_recovery.py
#	scripts/tutorials/atomic_action/hand_over.py
#	scripts/tutorials/atomic_action/move_end_effector.py
#	scripts/tutorials/atomic_action/move_held_object.py
#	scripts/tutorials/atomic_action/move_joints.py
#	scripts/tutorials/atomic_action/moving_target_recovery.py
#	scripts/tutorials/atomic_action/pickup.py
#	scripts/tutorials/atomic_action/place.py
#	scripts/tutorials/atomic_action/press.py
#	tests/sim/atomic_actions/test_actions.py
#	tests/sim/atomic_actions/test_control.py
#	tests/sim/atomic_actions/test_core.py
#	tests/sim/atomic_actions/test_endpoint_runtime_e2e.py
#	tests/sim/atomic_actions/test_engine.py
#	tests/sim/atomic_actions/test_runner.py
#	tests/sim/atomic_actions/test_trajectory_ops.py
#	tests/sim/planners/test_curobo_planner.py
#	tests/sim/planners/test_motion_generator_batched.py
#	tests/sim/skills/test_profiles.py
#	tests/sim/skills/test_scene.py
@skywhite1024
skywhite1024force-pushed the feat/atomic-action-verified-runtime branch from 20bee2a to 0968684CompareAugust 21, 2026 09:35
@skywhite1024
skywhite1024force-pushed the feat/atomic-action-verified-runtime branch from 0968684 to 20bee2aCompareAugust 21, 2026 11:31
Base automatically changed from feat/semantic-skill-compiler to mainAugust 21, 2026 14:59
…rified-runtime
# Conflicts:
#	agent_context/topics/atomic-actions/atomic-actions.md
#	docs/source/overview/sim/atomic_actions/index.md
#	docs/source/overview/sim/semantic_skills.md
#	docs/source/tutorial/atomic_actions.rst
#	docs/source/tutorial/semantic_skills.rst
#	embodichain/lab/sim/atomic_actions/core.py
#	embodichain/lab/sim/atomic_actions/execution.py
#	embodichain/lab/sim/atomic_actions/plans.py
#	embodichain/lab/sim/atomic_actions/primitives/pick_up.py
#	embodichain/lab/sim/skills/runtime.py
#	tests/sim/atomic_actions/test_actions.py
#	tests/sim/atomic_actions/test_engine_per_env.py
#	tests/sim/skills/test_runtime.py
@yuecideng
yuecideng merged commit ba1afb7 into mainAug 21, 2026
2 checks passed
@yuecideng
yuecideng deleted the feat/atomic-action-verified-runtime branch August 21, 2026 16:28
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

atomic actionatomic action related functionalityenhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@yuecideng