docs(limx): bind final TRON 2 visual evidence #6
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: LimX TRON 2 Tier 1 contract | |
| on: | |
| # Live settlement runs only where repository secrets are available. External | |
| # pull requests still execute every offline authorization and simulator gate. | |
| workflow_dispatch: | |
| pull_request: | |
| paths: | |
| - "tunnel/**" | |
| - "bridge/common/**" | |
| - "registry/vendors/limx/tron2/**" | |
| - "scripts/registry/**" | |
| - ".github/workflows/limx-tron2-tier1.yml" | |
| push: | |
| branches: [limx-tron2-tier-1] | |
| paths: | |
| - "tunnel/**" | |
| - "bridge/common/**" | |
| - "registry/vendors/limx/tron2/**" | |
| - "scripts/registry/**" | |
| - ".github/workflows/limx-tron2-tier1.yml" | |
| env: | |
| PROFILE: registry/vendors/limx/tron2/limx.tron2.wheeled-mujoco-webots-obstacle-nav.v1 | |
| permissions: | |
| contents: read | |
| jobs: | |
| tunnel-and-contract: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-go@v5 | |
| with: | |
| go-version: "1.25" | |
| - name: Build and test the real Go Tunnel | |
| run: | | |
| make build | |
| make test | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.10" | |
| - name: Install pinned profile dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -r "$PROFILE/bridge/requirements-dev.txt" | |
| python "$PROFILE/bridge/download_vendor_assets.py" | |
| - name: Run fail-closed profile and registry contracts | |
| env: | |
| PYTHONPATH: ${{ github.workspace }}/${{ env.PROFILE }}/bridge | |
| run: | | |
| python scripts/registry/validate_profiles.py --registry-root registry/vendors/limx | |
| python -m pytest -q "$PROFILE/tests/test_contract.py" "$PROFILE/tests/test_bridge_contract.py" "$PROFILE/tests/test_registry_contract.py" | |
| - name: Prove isValid false cannot publish, actuate, or settle | |
| env: | |
| PYTHONPATH: ${{ github.workspace }}/${{ env.PROFILE }}/bridge | |
| TUNNEL_BIN: ${{ github.workspace }}/bin/tunnel | |
| LD_LIBRARY_PATH: ${{ github.workspace }}/.zenoh-c/lib | |
| run: python -m pytest -q "$PROFILE/tests/test_x402_invalid_payment_gate.py" | |
| tron2-mujoco: | |
| name: TRON 2 real MuJoCo policy and Zenoh replay proof | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| needs: tunnel-and-contract | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.10" | |
| - name: Install pinned profile dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -r "$PROFILE/bridge/requirements-dev.txt" | |
| python "$PROFILE/bridge/download_vendor_assets.py" | |
| - name: Run official ONNX policy and real Zenoh bridge | |
| env: | |
| PYTHONPATH: ${{ github.workspace }}/${{ env.PROFILE }}/bridge | |
| run: | | |
| python -m pytest -q "$PROFILE/tests/test_mujoco_runtime.py" "$PROFILE/tests/test_real_zenoh_bridge.py" | |
| python "$PROFILE/bridge/run_mujoco_obstacle_course.py" --json-output "$PROFILE/artifacts/mujoco_result.json" | |
| - name: Upload MuJoCo evidence | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: limx-tron2-mujoco-evidence | |
| path: ${{ env.PROFILE }}/artifacts/mujoco_result.json | |
| retention-days: 90 | |
| if-no-files-found: error | |
| tron2-sim2sim: | |
| name: TRON 2 Sim-to-Sim (MuJoCo + Webots) | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 35 | |
| needs: tunnel-and-contract | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.10" | |
| - name: Install Webots and simulator dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y wget xvfb \ | |
| libgl1 libglu1-mesa libglib2.0-0 libgomp1 libfontconfig1 \ | |
| libxkbcommon0 libdbus-1-3 libx11-6 libx11-xcb1 libxcb1 \ | |
| libxext6 libxrender1 libxtst6 libxi6 libxss1 libqt5core5a \ | |
| libqt5gui5 libqt5widgets5 libqt5network5 libqt5svg5 \ | |
| libqt5webengine5 libqt5webenginecore5 libqt5webenginewidgets5 \ | |
| libqt5multimedia5 libqt5printsupport5 libqt5concurrent5 \ | |
| libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 \ | |
| libxcb-render-util0 libxcb-xinerama0 libxcb-xkb1 libxkbcommon-x11-0 | |
| sudo apt-get install -y libsndio7.0 2>/dev/null || sudo apt-get install -y libsndio-dev 2>/dev/null || true | |
| python -m pip install --upgrade pip | |
| python -m pip install -r "$PROFILE/bridge/requirements.txt" | |
| python "$PROFILE/bridge/download_vendor_assets.py" | |
| wget -q https://github.com/cyberbotics/webots/releases/download/R2025a/webots-R2025a-x86-64.tar.bz2 | |
| sudo tar xjf webots-R2025a-x86-64.tar.bz2 -C /usr/local | |
| - name: Run the same course and official model variant in both simulators | |
| env: | |
| PYTHONPATH: ${{ github.workspace }}/${{ env.PROFILE }}/bridge | |
| WEBOTS_EXE: /usr/local/webots/webots | |
| QT_QPA_PLATFORM: offscreen | |
| run: xvfb-run -a -s "-screen 0 1280x1024x24" python "$PROFILE/bridge/run_sim2sim_validation.py" | |
| - name: Upload Sim-to-Sim evidence | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: limx-tron2-sim2sim-evidence | |
| path: ${{ env.PROFILE }}/artifacts/ | |
| retention-days: 90 | |
| if-no-files-found: error | |
| tron2-base-sepolia-e2e: | |
| name: TRON 2 Base Sepolia settlement evidence | |
| if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' | |
| concurrency: | |
| # One live Tunnel may own this robot identity at a time, including | |
| # workflow_dispatch runs from different refs. | |
| group: limx-tron2-base-sepolia-limx-tron2-wf-sim-01 | |
| cancel-in-progress: false | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 25 | |
| needs: tunnel-and-contract | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-go@v5 | |
| with: | |
| go-version: "1.25" | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.10" | |
| - name: Install dependencies and real Tunnel | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -r "$PROFILE/bridge/requirements.txt" | |
| python "$PROFILE/bridge/download_vendor_assets.py" | |
| make build | |
| - name: Start local Zenoh router | |
| run: | | |
| wget -q https://github.com/eclipse-zenoh/zenoh/releases/download/1.9.0/zenoh-1.9.0-x86_64-unknown-linux-gnu-standalone.zip | |
| unzip -q zenoh-1.9.0-x86_64-unknown-linux-gnu-standalone.zip -d .zenoh-router | |
| .zenoh-router/zenohd > zenohd.log 2>&1 & | |
| sleep 2 | |
| grep -q "zenohd" zenohd.log | |
| - name: Run first-action Base Sepolia proof | |
| env: | |
| PRIVATE_KEY: ${{ secrets.BASE_SEPOLIA_PRIVATE_KEY }} | |
| ROBO_PAYEE_ADDRESS: ${{ secrets.ROBO_PAYEE_ADDRESS }} | |
| TUNNEL_BIN: ${{ github.workspace }}/bin/tunnel | |
| LD_LIBRARY_PATH: ${{ github.workspace }}/.zenoh-c/lib | |
| PROXY_WS_URL: wss://api.fabric.foundation/api/core/ws/robot | |
| PYTHONPATH: ${{ github.workspace }}/${{ env.PROFILE }}/bridge | |
| run: python "$PROFILE/bridge/run_live_base_sepolia_e2e.py" --ci | |
| - name: Upload generated Base Sepolia evidence | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: limx-tron2-base-sepolia-evidence | |
| path: ${{ env.PROFILE }}/artifacts/base_sepolia_result_*.json | |
| retention-days: 90 | |
| if-no-files-found: error |