Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 64 additions & 17 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,76 @@ name: CI
on:
push:
branches: ["main", "copilot/**"]
paths-ignore:
- "docs/**"
- "**/*.md"
- "**/*.rst"
- ".github/ISSUE_TEMPLATE/**"
- ".github/*.md"
pull_request:
branches: ["main"]
branches: ["main", "copilot/**"]
paths-ignore:
- "docs/**"
- "**/*.md"
- "**/*.rst"
- ".github/ISSUE_TEMPLATE/**"
- ".github/*.md"

permissions:
contents: read

jobs:
lint:
name: Lint (ruff check)
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Upgrade pip
run: python -m pip install --upgrade pip
- name: Install package and dev dependencies
run: pip install -e ".[dev]"
- name: Run ruff check
run: ruff check motion_player tests

format-check:
name: Format check (ruff format)
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Upgrade pip
run: python -m pip install --upgrade pip
- name: Install package and dev dependencies
run: pip install -e ".[dev]"
- name: Run ruff format --check
run: ruff format --check motion_player tests

precommit:
name: Pre-commit
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Upgrade pip
run: python -m pip install --upgrade pip
- name: Install package and dev dependencies
run: pip install -e ".[dev]"
- name: Run pre-commit
run: pre-commit run --all-files

test:
name: Test (Python ${{ matrix.python-version }} on ${{ matrix.os }})
runs-on: ${{ matrix.os }}
Expand All @@ -36,21 +99,5 @@ jobs:
# Install without optional mujoco/ik extras for headless CI
run: pip install -e ".[dev]"

- name: Lint with ruff
run: ruff check motion_player tests

- name: Run tests
run: pytest tests/ -v --tb=short

lint-only:
name: Lint (ruff)
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- run: pip install ruff
- run: ruff check motion_player tests
53 changes: 53 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Release

on:
push:
tags:
- "v*"
workflow_dispatch:

permissions:
contents: read

jobs:
build:
name: Build and smoke test
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4

- name: Set up Python 3.11
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Upgrade pip
run: python -m pip install --upgrade pip

- name: Install build dependencies
run: pip install build

- name: Install package and dev dependencies
run: pip install -e ".[dev]"

- name: Run release gate checks
run: make release-check

- name: Build wheel and sdist
run: python -m build

- name: Smoke test built wheel
run: |
python -m venv .venv-smoke
. .venv-smoke/bin/activate
python -m pip install --upgrade pip
pip install dist/*.whl
motion_player --version

- name: Upload release artifacts
uses: actions/upload-artifact@v4
with:
name: release-dist
path: dist/*
15 changes: 15 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: check-merge-conflict
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace

- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.15.9
hooks:
- id: ruff-check
args: [--fix]
- id: ruff-format
104 changes: 43 additions & 61 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,76 +2,58 @@

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.8.0] - 2026-04-16

### Added
- Added startup font-size controls for GUI entry commands via `--font-size` (`small|medium|large|xlarge`) with environment fallback `RMP_GUI_FONT_SIZE`.
- Added OSS governance baseline guidance via `CLAUDE.md` and OSS-focused release checks.

### Changed
- Refactored GUI font-size handling to track per-size availability and reject unavailable selections with explicit status feedback.
- Updated OSS quickstart and IK docs to align with v0.8.0 font-size startup behavior.

### Fixed
- Fixed persistent runtime font-size issue where only `small` effectively applied when higher-size font handles were unavailable.
- Hardened font installation to fail per size instead of aborting the full font registry initialization path.
- Updated OSS docs/release tests to validate OSS-owned artifacts only.

## [0.7.9] - 2026-04-15

- Web documentation site (planned)
- Conda package distribution (planned)
### Fixed
- Fixed directional font sync so startup and runtime GUI font sizing stay aligned.
- Increased the progress row depth to improve readability and reduce clipping.

## [0.7.0] - 2026-04-14
## [0.7.7] - 2026-04-15

### Highlights
### Fixed
- Enforced GUI font authority so panel font settings remain the single source of truth.
- Tuned the Runtime State and Tool Call dock area to a 2:1 height balance for clearer status scanning.

First public release! Robot Motion Player is now open-source under Apache 2.0 license.
## [0.7.6] - 2026-04-15

### Fixed
- Font-size dropdown now applies all size options reliably across callback payload variants.
- Replaced the redundant top Runtime State block with a unified top status dock.
- Reworked status display into a balanced 2-row layout:
- Row 1: Runtime State + Tool Call
- Row 2: Progress
- Increased default Runtime State / Tool Call panel heights to reduce routine scrolling.

## [0.7.5] - 2026-04-14

### Added
- Isolated panel runtime mode for `motion_player gui`, with viewer-path fallback behavior.
- Queue-based IPC adapters for panel command transport and monitor snapshots.
- Regression coverage for runtime fallback paths, IPC behavior, and panel process entry hardening.

### Changed
- Full GUI startup now prefers isolated panel process mode on Linux desktop sessions.

#### Core Features
- **Playback Module** - Real-time motion playback with MuJoCo backend
- Keyboard controls (play/pause, step forward/backward)
- Frame-by-frame navigation
- Marked frame support
- **IK Tuning Module** - 6D end-effector pose adjustment
- Jacobian-based inverse kinematics
- Unit-aware controls (meters, degrees)
- Real-time visualization
- Cross-frame propagation
- **Metrics Module** - AMP-aligned quality evaluation
- Joint velocity/acceleration limits
- GMR loss parity checking
- JSON/CSV report export
- **Editing Module** - Keyframe-safe trajectory editing
- Frame/segment editing
- Undo/redo support
- Edit history tracking
- **Convert Module** - URDF/XML format conversion
- MuJoCo XML support
- URDF to XML conversion
- **Export Module** - GIF/Video output
- GIF export
- MP4 export
- Frame sequence export
- **GUI Workbench** - Full graphical interface
- Play/Tune/Metrics/Audit tabs
- Timeline widget
- Real-time visualization

#### Integration
- MuJoCo backend (primary)
- Isaac backend (experimental)
- Pinocchio IK backend (optional)

#### Documentation
- Quick Start Guide (English/Chinese)
- IK Usage Guide
- Example robot model (Booster T1)
- Sample motion data

#### Testing
- 80+ unit tests
- Pytest configuration
- CI workflow (GitHub Actions)

### Technical Details

- **Python Support**: 3.9, 3.10, 3.11, 3.12
- **Primary Backend**: MuJoCo 3.0+
- **GUI Framework**: Dear PyGui
- **License**: Apache 2.0

[unreleased]: https://github.com/bitroboticslab/robot-motion-player/compare/v0.7.0...HEAD
[0.7.0]: https://github.com/bitroboticslab/robot-motion-player/releases/tag/v0.7.0
### Fixed
- DearPyGui status-dock rebuild parent-chain handling in callback paths.
- Guarded fail-open status-dock rebuild logic to avoid panel-loop aborts during rebuild errors.
33 changes: 33 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# CLAUDE.md

## Scope
- Applies to the full `robot-motion-player-oss` repository.
- Instruction precedence: system/developer rules > `AGENTS.md` > this file > default docs.

## Source of Truth (OSS)
- User onboarding: `README.md`, `docs/QUICKSTART_en.md`, `docs/QUICKSTART_zh.md`
- IK behavior and workflows: `docs/IK_USAGE.md`
- Release-facing history: `CHANGELOG.md`

## Standard Workflow
1. Install development dependencies with `make install-dev`.
2. Validate changes with:
- `make lint`
- `make test` (or `make test-quick` while iterating)
- `make check` before handoff
3. For release or docs-governance updates, also run `make release-check`.
4. Update tests/docs whenever user-facing behavior changes.

## Implementation Guardrails
- State explicit assumptions when requirements are ambiguous.
- Prefer the simplest viable solution; avoid speculative abstractions.
- Keep changes surgical and within task scope.
- Keep OSS tests scoped to OSS-owned files only.

## Release-Sensitive Rules
- Keep version markers synchronized by role:
- `pyproject.toml`: release version `X.Y.Z`
- `motion_player/__init__.py`: metadata fallback `X.Y.Z.dev0`
- `motion_player/cli/main.py`: `_get_version` fallback `X.Y.Z.dev0`
- Keep `CHANGELOG.md`, `docs/QUICKSTART_en.md`, `docs/QUICKSTART_zh.md`, and `docs/IK_USAGE.md` aligned with release behavior.
- Run `make release-check` before tagging.
Loading
Loading