Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create a pull request for EmbodiChain following the project's PR template and conventions, including proportional validation and proper GitHub repository labels
.claude/skills/dexforce-pr/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | 125% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 96% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 137% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 100% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 167% | 0% |
This skill guides you through creating a pull request that follows the EmbodiChain project's PR template and contribution guidelines.
Invoke this skill when:
First, check the current git status and changes:
bashgit status git diff HEAD
Based on the changes made, select one of these PR types:
Write a description that includes:
Inspect the changed files and validate only the affected behavior. Do not run the full test suite automatically.
actionlint on the changed workflows and anydirectly related workflow-script tests.
Python tests unless executable examples or docs tooling changed.
focused integration tests.
test-configuration changes, release-critical changes that cannot be validated narrowly, or when the user explicitly requests it.
If a validation command is likely to take more than two minutes, state why it is needed before starting it. Honor an explicit user request to skip or narrow tests, and record skipped checks honestly in the PR description.
Use the pre-commit-check skill for the detailed selection and reporting rules.
Before creating the PR, ensure code is formatted:
bashblack .
If formatting changes were made, commit them first:
bashgit add -A git commit -m "Format code with black"
Then run the read-only public API documentation gate used by CI:
bashpython docs/scripts/check_api_docs.py
If it reports missing public exports, invoke $update-api-docs to generate or update the relevant Sphinx entries and descriptions, then rerun the checker. Keep generation in that specialized skill; do not add placeholder API docs in the PR workflow merely to make the gate pass.
For a single PR, create a feature branch if needed:
bashgit checkout -b <branch-name>
Recommended branch naming:
fix/<description> - for bug fixesfeat/<description> - for new featuresenhance/<description> - for enhancementsdocs/<description> - for documentation changesFor a large change that can be split into small, dependency-ordered layers, follow the Stacked Pull Request Workflow instead of steps 6 through 9. Keep unrelated or independent changes in separate PRs rather than forcing them into a stack.
Commit with a clear message following conventional commits format:
bashgit commit -m "type(scope): brief description Detailed description of the change."
bashgit push -u origin <branch-name>
Use the gh CLI with the proper PR template:
bashgh pr create --title "<PR Title>" --body "<PR Body>"
Use a stack when later changes depend on earlier changes but each layer can be reviewed as a focused PR. Put shared types, schemas, and other foundations in lower layers; put their dependents in higher layers. Keep every branch and PR in the same repository because GitHub does not support cross-fork stacks. If the contribution must come from a fork, use a single PR or separate non-stacked PRs.
> !NOTE] > GitHub stacked pull requests are in public preview and may change. They are > available on GitHub, GitHub Mobile, and through the gh stack extension, > but not in GitHub Desktop.
Use GitHub CLI 2.90.0 or later and Git 2.20 or later. Authenticate, then install the official extension if it is not already installed:
bashgh auth login gh extension install github/gh-stack
Define the trunk and order the layers from foundational to dependent. The bottom PR targets the trunk, usually main, and each PR above it targets the branch immediately below it:
textfeat/ui -> PR #3 (base: feat/api) <- top feat/api -> PR #2 (base: feat/core) feat/core -> PR #1 (base: main) <- bottom main <- trunk
Ensure each PR contains only the diff for its layer. If code in one layer depends on another, place the dependency in the same layer or a lower layer.
Initialize the bottom branch, commit its focused change, then add branches from the bottom upward:
bashgh stack init --base main feat/core # Make, stage, validate, and commit the foundational change. gh stack add feat/api # Make, stage, validate, and commit the dependent API change. gh stack add feat/ui # Make, stage, validate, and commit the dependent UI change. gh stack view
Run the proportional validation selected in step 4 for every affected layer. Keep the commits and working tree for each layer complete before adding the next branch.
Use the interactive submit flow so each PR can receive an EmbodiChain title and body. This command pushes the branches, creates or updates their PRs, and links them as a stack:
bashgh stack submit
Use gh stack push only when the branches should be pushed without creating or updating PRs. Use gh stack submit --auto only when generated titles and draft PRs are acceptable; add --open to make them ready for review.
After the remote stack or trunk changes, synchronize the entire chain:
bashgh stack sync
After amending a lower layer, cascade the new commit history through its dependents, then update the remote PRs:
bashgh stack rebase --no-trunk gh stack submit
If a rebase stops on conflicts, resolve and stage them, then run gh stack rebase --continue; use gh stack rebase --abort to restore the pre-rebase state. Preserve the dependency order and rerun validation for every affected layer before submitting again.
Apply the standard PR template to every PR and add this stack context near the top of each description:
markdown## Stack - Layer: <position>/<total> - Base: `<base-branch>` - Depends on: <lower PR URL or "none"> - Followed by: <upper PR URL or "none">
Explain what can be reviewed in that layer and report its validation separately. Use Fixes #<issue> only on the layer whose independent merge resolves the issue; use Refs #<issue> on prerequisite layers. Apply appropriate repository labels to every PR in the stack.
Review every layer independently. GitHub applies the trunk's merge requirements, branch protections, CODEOWNER approvals, and applicable PR-triggered CI checks to every layer, including PRs that do not directly target the trunk.
Merge from the bottom upward:
GitHub automatically rebases and retargets them.
Use gh stack merge to select and merge the desired portion. The operation is all-or-nothing for the selected layers and cannot bypass merge requirements:
bashgh stack merge
After creating the PR, select proper labels from the repository label list and apply them.
First, list available labels:
bashgh label list
Then choose labels based on change type and scope. Typical mapping:
bugenhancementfeaturedocsphysics, robot, agent, dataset, dexsimApply labels to the PR:
bashgh pr edit <pr-number> --add-label "bug" --add-label "env"
If needed, remove incorrect labels:
bashgh pr edit <pr-number> --remove-label "<label-name>"
Use this template for the PR body:
markdown## Description <!-- Clear summary of the change --> This PR [briefly describe what the PR does]. <!-- Include motivation and context if needed --> [Add any relevant motivation and context here]. <!-- List dependencies if applicable --> Dependencies: [list any dependencies required] <!-- Reference the issue --> Fixes #<issue-number> ## Type of change <!-- Select one and delete the others --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] Enhancement (non-breaking change which improves an existing functionality) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (existing functionality will not work without user modification) - [ ] Documentation update ## Screenshots <!-- Attach before/after screenshots if applicable --> ## Checklist - [x] I have run the `black .` command to format the code base. - [ ] I have made corresponding changes to the documentation - [ ] Public API changes are reflected in the API docs (`python docs/scripts/check_api_docs.py`), if applicable - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] Dependencies have been updated, if applicable.
| Command | Purpose | |---------|---------| | git status | Check current state | | git diff HEAD | Show changes | | black . | Format code | | python docs/scripts/check_api_docs.py | Check public API documentation coverage | | git checkout -b branch-name | Create branch | | git push -u origin branch | Push to remote | | gh pr create | Create PR | | gh stack init --base main branch | Initialize a stack and its bottom branch | | gh stack add branch | Add a branch above the current top layer | | gh stack view | Show stack order and PR state | | gh stack submit | Push branches and create or update stacked PRs | | gh stack sync | Fetch, cascade rebase, push, and synchronize the stack | | gh stack rebase --no-trunk | Cascade a lower-layer update through the stack | | gh stack merge | Merge a selected portion or the entire stack | | gh label list | List repository labels | | gh pr edit <pr-number> --add-label ... | Apply labels to PR |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-08 | fail→pass | 10,666 | 6,176 | -42% | 1 | 1 | 0% | 1,818 | 4,083 | +125% | 0 | 0 | — |
case-01 | fail→fail | 3,061 | 4,680 | +53% | 1 | 1 | 0% | 405 | 3,579 | +784% | 0 | 0 | — |
case-02 | fail→fail | 19,460 | 2,833 | -85% | 1 | 1 | 0% | 3,744 | 3,306 | -12% | 0 | 0 | — |
case-14 | fail→pass | 13,072 | 6,659 | -49% | 1 | 1 | 0% | 2,179 | 4,279 | +96% | 0 | 0 | — |
case-03 | fail→fail | 3,519 | 4,437 | +26% | 1 | 1 | 0% | 506 | 3,179 | +528% | 0 | 0 | — |
case-04 | fail→fail | 21,451 | 13,861 | -35% | 1 | 1 | 0% | 3,629 | 5,298 | +46% | 0 | 0 | — |
case-05 | fail→fail | 13,726 | 6,355 | -54% | 1 | 1 | 0% | 2,741 | 3,254 | +19% | 0 | 0 | — |
case-06 | fail→fail | 13,865 | 12,030 | -13% | 1 | 1 | 0% | 2,530 | 5,157 | +104% | 0 | 0 | — |
case-07 | pass→pass | 12,930 | 8,898 | -31% | 1 | 1 | 0% | 2,151 | 4,741 | +120% | 0 | 0 | — |
case-09 | pass→pass | 9,931 | 4,103 | -59% | 1 | 1 | 0% | 1,840 | 3,821 | +108% | 0 | 0 | — |
case-10 | fail→fail | 9,581 | 2,705 | -72% | 1 | 1 | 0% | 1,719 | 3,420 | +99% | 0 | 0 | — |
case-11 | fail→fail | 10,158 | 5,979 | -41% | 1 | 1 | 0% | 1,701 | 3,845 | +126% | 0 | 0 | — |
case-12 | pass→pass | 8,729 | 4,347 | -50% | 1 | 1 | 0% | 1,578 | 3,747 | +137% | 0 | 0 | — |
case-13 | fail→pass | 9,884 | 5,956 | -40% | 1 | 1 | 0% | 1,730 | 4,107 | +137% | 0 | 0 | — |
case-15 | fail→pass | 11,038 | 12,807 | +16% | 1 | 1 | 0% | 2,072 | 4,142 | +100% | 0 | 0 | — |
case-16 | fail→pass | 8,850 | 5,905 | -33% | 1 | 1 | 0% | 1,506 | 4,015 | +167% | 0 | 0 | — |
case-17 | fail→pass | 39,534 | 2,703 | -93% | 1 | 1 | 0% | 1,870 | 3,436 | +84% | 0 | 0 | — |
case-18 | fail→pass | 15,060 | 6,202 | -59% | 1 | 1 | 0% | 2,684 | 3,836 | +43% | 0 | 0 | — |
case-19 | fail→pass | 9,928 | 2,952 | -70% | 1 | 1 | 0% | 1,699 | 3,461 | +104% | 0 | 0 | — |
case-20 | pass→pass | 9,678 | 5,720 | -41% | 1 | 1 | 0% | 1,622 | 3,959 | +144% | 0 | 0 | — |
case-21 | fail→pass | 8,381 | 5,075 | -39% | 1 | 1 | 0% | 1,351 | 3,819 | +183% | 0 | 0 | — |
case-22 | fail→pass | 18,858 | 5,767 | -69% | 1 | 1 | 0% | 3,245 | 3,977 | +23% | 0 | 0 | — |
case-23 | fail→pass | 8,973 | 3,266 | -64% | 1 | 1 | 0% | 1,513 | 3,533 | +134% | 0 | 0 | — |
case-24 | fail→pass | 9,134 | 2,494 | -73% | 1 | 1 | 0% | 1,538 | 3,395 | +121% | 0 | 0 | — |
case-25 | fail→fail | 13,517 | 3,678 | -73% | 1 | 1 | 0% | 1,319 | 3,612 | +174% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted, and 24 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +48 percentage points is the difference between those two pass rates over the 24 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/22/2026 | +27% |
Other measured skills in the registry, with their headline benchmark lift.