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
10 changes: 6 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,10 @@ jobs:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up Rust for Dora C++ API
uses: dtolnay/rust-toolchain@stable
- name: Set up Rust 1.95 for Dora C++ API
uses: dtolnay/rust-toolchain@master
with:
toolchain: "1.95.0"

- name: Set up C++ dependencies
uses: mamba-org/setup-micromamba@v2
Expand Down Expand Up @@ -127,13 +129,13 @@ jobs:
shell: bash -el {0}
run: ctest --test-dir cpp/forge_robot/build --output-on-failure

- name: Configure C++ forge_robot Dora v0.4.1 runner
- name: Configure C++ forge_robot Dora 1.x runner (v1.0.1)
shell: bash -el {0}
run: >-
cmake -S cpp/forge_robot -B cpp/forge_robot/build-dora -G Ninja
-DFORGE_ROBOT_CPP_WITH_DORA=ON
-DFORGE_ROBOT_CPP_BUILD_TESTS=ON

- name: Compile C++ forge_robot Dora v0.4.1 runner
- name: Compile C++ forge_robot Dora 1.x runner (v1.0.1)
shell: bash -el {0}
run: cmake --build cpp/forge_robot/build-dora --target forge_robot_dora_runner_compile
2 changes: 1 addition & 1 deletion .github/workflows/publish-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on:
workflow_dispatch:
inputs:
tag:
description: "Immutable family tag to publish (for example, forge-common-v1.0.1)"
description: "Immutable family tag to publish (for example, forge-common-v2.0.0)"
required: true
type: string

Expand Down
43 changes: 42 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,50 @@
# Changelog

Forge package families are versioned independently. Implementations of the same logical family across Python, Rust, C++, and the language-neutral interface contract share one version and one protected GitLab tag.
Forge package families are versioned independently. Python, Rust, and C++ implementations of the same logical family share one package version and protected GitLab tag; language-neutral interface versions are tracked separately.

## Unreleased

## forge-common 2.0.0 - 2026-09-04

Protected tag: `forge-common-v2.0.0`

- Align Common with the coordinated Forge 2.0 release train without changing its public utility APIs.
- Preserve the Python, Rust, and C++ logging contracts from the 1.x line.

## forge-kinematics 2.0.0 - 2026-09-04

Protected tag: `forge-kinematics-v2.0.0`

- Align Kinematics with the coordinated Forge 2.0 release train without changing its solver APIs or optional dependency model.
- Preserve the Pinocchio-based FK, Jacobian, and IK behavior from the 1.x line.

## forge-policy 2.0.0 - 2026-09-03

Protected tag: `forge-policy-v2.0.0`

- Migrate the Python Dora runner dependency from `dora-rs 0.4.1` to the compatible Dora 1.x line (`>=1.0,<2`), currently locked and validated with 1.0.1.
- Require the Forge Msgs 2 carrier line.

## forge-robot 2.0.0 - 2026-09-03

Protected tag: `forge-robot-v2.0.0`

- Migrate the Python Dora runner dependency and optional C++ node bridge from Dora 0.4.1 to the compatible Dora 1.x line; Python is currently locked to 1.0.1 and the reproducible C++ source build is pinned to `v1.0.1`.
- Require the Forge Msgs 2 carrier line while keeping the driver contract and node input/output semantics unchanged.

## forge-msgs 2.0.0 - 2026-09-03

Protected tag: `forge-msgs-v2.0.0`

- Move the public Rust `RecordBatch` API from Arrow 54 to Arrow 59 for Dora 1.0 interoperability.
- Preserve the cross-language `forge_msgs.v1` wire schema; the package major and wire-schema version are now tracked independently.

## forge-tool 2.0.0 - 2026-09-03

Protected tag: `forge-tool-v2.0.0`

- Move the optional Dora carrier integration to the Forge Msgs 2 line.

## forge-tool 1.0.0 - 2026-08-27

Protected tag: `forge-tool-v1.0.0`
Expand Down
8 changes: 4 additions & 4 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Contributing to Forge

Thank you for your interest in contributing to Forge. The repository maintains
stable 1.x package families while developing the Tool alpha family, so focused
changes, compatibility analysis, and cross-language tests are especially
important.
Thank you for your interest in contributing to Forge. `master` carries the current
Forge 2.x line, while `stable/1.x` preserves the Dora 0.4-compatible Forge 1.x line
for critical fixes. Focused changes, compatibility analysis, and cross-language
tests are especially important.

## Development Setup

Expand Down
74 changes: 21 additions & 53 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

55 changes: 29 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,21 +30,23 @@ packages, for example a separate `forge_robots` repository.

## Status

Forge tracks six independently versioned package families: Common, Msgs, Robot,
Policy, Kinematics, and Tool. Current releases are Common `1.0.1`, Msgs `1.3.0`, Robot
`1.0.1`, Policy `1.0.1`, Kinematics `1.0.1`, and Tool `0.1.0`. Implementations of one
family across Python, Rust, C++, and the language-neutral interface remain synchronized;
unrelated families may release at different rates.
Forge tracks six package families: Common, Msgs, Robot, Policy, Kinematics, and Tool.
The coordinated Dora 1.x release train declares all six families as `2.0.0` while
allowing later family-specific patch releases. Implementations of one family across
Python, Rust, C++, and the language-neutral interface remain synchronized.

`master` carries the latest Forge 2.x development line. `stable/1.x` preserves the
Dora 0.4-compatible Forge 1.x line for critical fixes during downstream migration.

Each release is identified by a protected family tag such as
`forge-msgs-v1.3.0`; Tool releases use `forge-tool-v<semver>`. Historical generic tags
`forge-msgs-v2.0.0`; Tool releases use `forge-tool-v<semver>`. Historical generic tags
such as `v1.0.0` belong to an earlier repository layout and do not identify these
releases.

The initial family releases define stable contracts for message schemas,
serialization, shared utilities, kinematics, and robot/policy runners. Each
family's `1.x` line remains backward compatible; breaking that family contract
requires its next major version. See
family's current major line remains backward compatible; breaking that family
contract requires its next major version. See
[`CHANGELOG.md`](CHANGELOG.md) for the release baselines and
[`RELEASING.md`](RELEASING.md) for package-family boundaries, protected GitLab
tags, and validation procedures.
Expand Down Expand Up @@ -89,11 +91,11 @@ forge/
- A C++20-capable compiler and CMake 3.20 or newer for C++ packages;
`cpp/forge_msgs` and its dependents require C++20
- Apache Arrow C++ for `cpp/forge_msgs`
- Rust/Cargo and network access, or a local Dora `v0.4.1` checkout, for the
optional C++ `forge_robot` Dora runner
- Rust 1.95 or newer and network access, or a compatible local Dora 1.x checkout,
for the optional C++ `forge_robot` Dora runner
- [`uv`](https://docs.astral.sh/uv/) for Python dependency management
- Dora runtime when running real nodes (`dora-rs==0.4.1` is used by the Python
node packages)
- A Dora 1.x runtime when running real nodes (the Python packages declare
`dora-rs>=1.0,<2`; the current lock file validates 1.0.1)

## Installation

Expand Down Expand Up @@ -144,8 +146,8 @@ cmake -S cpp/forge_robot -B cpp/forge_robot/build
cmake --build cpp/forge_robot/build
```

Build and compile-link validate the C++ `forge_robot` Dora runner against Dora
`v0.4.1`:
Build and compile-link validate the C++ `forge_robot` Dora 1.x runner against
the current pinned baseline, Dora `v1.0.1`:

```bash
cmake -S cpp/forge_robot -B cpp/forge_robot/build-dora \
Expand All @@ -155,14 +157,15 @@ cmake --build cpp/forge_robot/build-dora --target forge_robot_dora_runner_compil
```

The C++ Dora API headers are generated by Dora's CXX bridge. By default,
`cpp/forge_robot` clones `https://github.com/dora-rs/dora.git` at tag
`v0.4.1`; it does not use Dora `main`. To use a local Dora `v0.4.1` checkout:
`cpp/forge_robot` downloads the Dora `v1.0.1` source archive with a pinned
SHA256; it does not use Dora `main`. To use a compatible local Dora 1.x
checkout:

```bash
git clone --branch v0.4.1 https://github.com/dora-rs/dora.git /path/to/dora-v0.4.1
git clone --branch v1.0.1 https://github.com/dora-rs/dora.git /path/to/dora-v1.0.1
cmake -S cpp/forge_robot -B cpp/forge_robot/build-dora \
-DFORGE_ROBOT_CPP_WITH_DORA=ON \
-DDORA_ROOT_DIR=/path/to/dora-v0.4.1
-DDORA_ROOT_DIR=/path/to/dora-v1.0.1
cmake --build cpp/forge_robot/build-dora --target forge_robot_dora_runner_compile
```

Expand All @@ -174,7 +177,7 @@ include(FetchContent)
FetchContent_Declare(
forge
GIT_REPOSITORY https://gitlab.ex-ai.cn/PhyAgentOS/framework/forge.git
GIT_TAG forge-msgs-v1.3.0
GIT_TAG forge-msgs-v2.0.0
SOURCE_SUBDIR cpp/forge_msgs
)
FetchContent_MakeAvailable(forge)
Expand All @@ -194,7 +197,7 @@ include(FetchContent)
FetchContent_Declare(
forge_common
GIT_REPOSITORY https://gitlab.ex-ai.cn/PhyAgentOS/framework/forge.git
GIT_TAG forge-common-v1.0.1
GIT_TAG forge-common-v2.0.0
SOURCE_SUBDIR cpp/forge_common
)
FetchContent_MakeAvailable(forge_common)
Expand All @@ -214,7 +217,7 @@ include(FetchContent)
FetchContent_Declare(
forge_robot
GIT_REPOSITORY https://gitlab.ex-ai.cn/PhyAgentOS/framework/forge.git
GIT_TAG forge-robot-v1.0.1
GIT_TAG forge-robot-v2.0.0
SOURCE_SUBDIR cpp/forge_robot
)
FetchContent_MakeAvailable(forge_robot)
Expand All @@ -236,20 +239,20 @@ the public umbrella header:
For packages that only implement driver logic, safety clipping, or Arrow
validation, keep `FORGE_ROBOT_CPP_WITH_DORA` off. To compile a Dora runner in the
downstream package, enable the option at configure time and either let CMake
download Dora `v0.4.1` or point `DORA_ROOT_DIR` at a local Dora `v0.4.1`
checkout:
download the pinned Dora `v1.0.1` baseline or point `DORA_ROOT_DIR` at a
compatible local Dora 1.x checkout:

```bash
cmake -S . -B build \
-DFORGE_ROBOT_CPP_WITH_DORA=ON \
-DDORA_ROOT_DIR=/path/to/dora-v0.4.1
-DDORA_ROOT_DIR=/path/to/dora-v1.0.1
```

## Testing

Verify that every Python, Rust, and C++ implementation matches its package
family version in `versions.toml`, including the Msgs interface major and lock
files:
family version in `versions.toml`, including the independently tracked Msgs
interface version and lock files:

```bash
python scripts/check_release_versions.py
Expand Down
Loading
Loading