Skip to content

Integrate standalone G1 SONIC policy and blueprint - #3557

Open
Nabla7 wants to merge 24 commits into
pim/feat/g1-sonic-inferencefrom
pim/feat/g1-sonic-wbc
Open

Nabla7 wants to merge 24 commits into
pim/feat/g1-sonic-inferencefrom
pim/feat/g1-sonic-wbc

Conversation

@Nabla7

@Nabla7 Nabla7 commented Aug 19, 2026 •

Copy link
Copy Markdown
Collaborator

What is this feature?

Run NVIDIA GEAR-SONIC v1.1 through a standalone G1SonicPolicyModule, with Jetson clock configuration treated as a hardware startup prerequisite. The unitree-g1-sonic-wbc blueprint does not use ControlCoordinator or coordinator tasks.

navigation / teleop -> MovementManager -> G1SonicPolicyModule -> SonicController -> motor IO
  • MovementManager selects navigation/teleop velocity commands. Named arm references condition the whole-body policy, which owns all 29 motor targets.
  • SonicController owns the 50 Hz policy loop, measured-pose activation ramp and fault latch; SonicPipeline handles inference. Hardware motor IO remains in the dedicated G1WholeBodyConnection worker; simulation uses the existing MuJoCo adapter.
  • Walking commands expire after one second while balancing continues. Disarming, resetting and completing the activation ramp clear old walking commands. disarm() returns to measured-pose hold; emergency stops latch damping until the stack is restarted.
  • Hardware starts unarmed in dry-run. After inspecting feedback, set_dry_run(False) followed by arm() requests live control. Simulation arms automatically.
  • The JetPack 5/6 setup installs the matching GPU runtime and verified model assets. A separate one-time installer adds dimos-jetson-clocks.service, ordered after NVIDIA's power-mode service. It runs NVIDIA's clock utility as root; DimOS remains unprivileged. It preserves the selected power mode and fan policy and does not start or restart robot control.
  • SONIC reads CPU/GPU clock limits before hardware startup, arming, reactivation and switching off dry-run. Unlocked or unreadable limits reject the operation with a repair command. Simulation and non-Jetson hosts skip this check; it adds no filesystem reads to the policy loop.

Stack: #4304 -> #4305 -> #3557. The shared motor-fault interface comes from #4304 and inference comes from #4305. The unmerged ControlCoordinator refactor and sim2 migration are not dependencies.

Setup, streams and RPC examples.

Why do we need this?

Navigation and teleop need to command SONIC while its policy runs continuously. On Jetson, selecting MAXN alone still allows dynamic clock scaling, and manually applied clock locks are lost at reboot. An installed GPU runtime and a selected power mode therefore do not establish the required inference timing.

On 2026-10-18, the Orin NX G1 deployment was already in MAXN. The same publisher-free, 250-step standing inference harness measured the following before and after jetson_clocks:

Metric Dynamic clocks Locked clocks
Effective rate 45.58 Hz 50.00 Hz
Mean inference step 15.54 ms 8.29 ms
p95 inference step 28.19 ms 13.75 ms
Maximum inference step 33.93 ms 18.65 ms

The deployment trial had ZED HD720 at 15 FPS with NEURAL LIGHT depth and DimOS Desktop running, with Rerun disabled. It used synthetic feedback and sent no motor commands. GPU clocks were mostly 510 MHz before and fixed at 918 MHz afterward; CPU limits were locked to 1,984 MHz.

These measurements describe that deployed workload, not an end-to-end validation of this PR's blueprint. At 50 Hz the step budget is 20 ms. Even after locking, the standing start-to-start interval reached 27.36 ms, and a separate synthetic turning workload reached a 36.31 ms inference step. Clock locking does not prove physical walking stability or guarantee every deadline. The startup check verifies CPU/GPU limits, not power-mode adequacy, EMC, cooling or ongoing thermal throttling.

How to Test

On a Jetson with the documented runtime and models installed, install the clock service once from the checkout:

sudo bash bin/hardware/g1/install-jetson-clocks
systemctl status dimos-jetson-clocks.service --no-pager
dimos --transport zenoh run unitree-g1-sonic-wbc

The service applies clocks immediately and enables them at boot. active (exited) is expected. The installer requires NVIDIA's jetson_clocks, an enabled nvpmodel.service, systemd and sudo; no passwordless sudo rule is needed. Use the provisioned SONIC environment's dimos directly on Jetson.

For simulation on macOS or a CUDA-enabled Linux host with dependencies and models installed. macOS selects CPU inference automatically; hardware remains CUDA-only. On a Mac, install with uv sync --extra control --extra sim and fetch models with uv run --no-sync dimos-sonic-models:

uv run --no-sync dimos --transport zenoh --simulation mujoco --viewer rerun run unitree-g1-sonic-wbc

Focused verification:

pytest dimos/robot/unitree/g1/test_jetson_clocks.py \
  dimos/robot/unitree/g1/test_sonic_policy.py \
  dimos/robot/unitree/g1/test_wholebody_connection.py \
  -m 'not (self_hosted or mujoco or self_hosted_large)' -q --no-cov
  • Earlier checkpoint: 60 focused tests passed; two self-hosted blueprint-composition cases are deselected. Tests use fake sysfs, models and motor IO and cover rejected activation without changing control state, simulation bypass, continued stop access and motor-publisher safeguards.
  • Targeted mypy, Ruff, shell syntax and commit hooks pass.
  • The identical service unit passed systemd-analyze verify on the G1, and the clock reader passed against the G1's locked clocks under Python 3.10. Boot-time execution has not yet been verified by a reboot.
  • Physical walking stability, including the reported hardware instability, remains unvalidated by these checks.

Mac CPU verification

Restores the CPU-simulation path from the older sim2 SONIC work without adding a sim2 dependency. All three models use CPUExecutionProvider with four threads; this is explicit simulation support, not a silent hardware fallback.

Native WBC blueprint on this Mac, MuJoCo and actual ONNX models, Rerun disabled: 15 seconds, 0.607 m travelled, stopped, remained upright, no policy fault. Policy step mean 5.0 ms, p99 17.3 ms; the maximum exceeded the 20 ms budget, so this is not a hard-real-time guarantee. Commands were sent through the policy RPC, not the Desktop UI. Workers exited, with existing legacy shared-memory resource-tracker cleanup warnings in the log.

A later repeat under severe host load (load average 150.8; 18.5 GB swap in use) hit the existing planner timeout and latched damping. The CPU path is functional, not a hard-real-time guarantee; no watchdog threshold was relaxed.

Latest layer-only policy checks: 24 passed, plus 4 real/sim Mac/Linux composition cases, targeted mypy and commit hooks. Physical-robot acceptance remains separate.

Which issue(s) does this PR close?

No separate issue is closed.

Checklist

  • I have read and approved the CLA.

Stack update (2026-10-22)

Review and merge in order:

  1. Preserve G1 motor-command freshness and MuJoCo timing #4304: G1 motor delivery and simulation foundation.
  2. Add SONIC v1.1 inference and verified model setup #4305: SONIC inference and verified assets.
  3. Integrate standalone G1 SONIC policy and blueprint #3557: standalone policy module and blueprint.
  4. feat(g1): add SONIC Desktop activation and stop controls #4783 (draft): Desktop activation/stop APIs and run-bound gateway calls.
  5. feat(g1): add enterprise Pico WebXR full-body SONIC teleop #4784 (draft): enterprise Pico browser WebXR full-body teleop.

Controller app companion: jeff-hykin/dim-controller#1, separate repository.

Main at 42ca50dfef is merged through the original three branches without rewriting history. No sim2 or unmerged ControlCoordinator dependency was introduced. The native Pico/XRoboToolkit workaround is excluded.

Previous checkpoint, before the Mac CPU fix: 224 focused Python checks passed (SONIC/WebXR/movement, gateway/G1 safety/clocks/sim adapter, composition and registry); one hardware-specific check was skipped. Targeted mypy and commit hooks passed. The companion UI passed 290 tests and production-bundle desktop/mobile browser checks using mocked gateway replies.

Mac CPU simulation is now supported and verified with the actual SONIC models in MuJoCo (walking, stopping and staying upright). Hardware still requires CUDA. Enterprise-Pico tracking and physical-robot acceptance remain pending; no robot deployment or actuation was performed.

@codecov

codecov Bot commented Aug 19, 2026 •

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
6676 1 6675 47
View the top 1 failed test(s) by shortest run time
experimental.gateway.tests.test_config::test_every_registered_blueprint_is_annotated
Stack Traces | 0.119s run time
def test_every_registered_blueprint_is_annotated() -> None:
        source = annotation_file.load()
        annotated = {name for robot in source["robots"].values() for name in robot["blueprints"]}
        missing = sorted(
            name
            for name in all_blueprints
            if name not in annotated and not annotation_file.HIDDEN_NAME.search(name)
        )
>       assert not missing, f"add these to experimental/gateway/annotations.yaml: {', '.join(missing)}"
E       AssertionError: add these to experimental/gateway/annotations.yaml: unitree-g1-sonic-wbc
E       assert not ['unitree-g1-sonic-wbc']

annotated  = {'a1z-planner-coordinator', 'alfred-keyboard-teleop', 'alfred-mls-nav', 'alfred-mls-nav-lidar', 'alfred-nav', 'coordinator-a1z', ...}
missing    = ['unitree-g1-sonic-wbc']
source     = {'robots': {'a1z': {'blueprints': {'a1z-planner-coordinator': {'description': 'Motion planning and execution for a Gal...': {'label': 'Arms'}, 'dog': {'label': 'Dogs'}, 'drone': {'label': 'Drones'}, 'humanoid': {'label': 'Humanoids'}, ...}}

.../gateway/tests/test_config.py:255: AssertionError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@dimos-bot dimos-bot mentioned this pull request Aug 21, 2026
@TomCC7 TomCC7 self-assigned this Aug 21, 2026
@Nabla7 Nabla7 changed the title Pim/feat/g1 sonic wbc SONIC whole-body controller for the G1 Aug 22, 2026
@Nabla7
Nabla7 marked this pull request as ready for review August 22, 2026 07:53
@greptile-apps

greptile-apps Bot commented Aug 22, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

This change adds the G1 SONIC v1.1 whole-body-control task, coordinator commands, ZMQ command ingestion, motion playback, the G1 blueprint, and MuJoCo support.

It is not ready to merge because malformed SONIC ZMQ frames with zero-length fields can raise unhandled exceptions during controller dispatch. Earlier reports that SONIC was included in Ubuntu blueprint validation, that velocity RPC bypassed declared-command validation, and that command-wire heading changes were ignored were disproved by exercising the current behavior.

Confidence Score: 3/5

Not safe to merge until malformed SONIC wire frames are rejected before controller dispatch.

One verified input-driven controller crash remains in the SONIC wire decoder and dispatch path.

Files Needing Attention: dimos/control/tasks/g1_sonic_wbc_task/zmq_wire.py

Security Review

Malformed input received on the SONIC ZMQ control channel can terminate a controller task tick. The decoder should reject zero-length and otherwise invalid field dimensions, and enforce the expected scalar and vector field shapes before data reaches command, planner, or pose handling.

T-Rex T-Rex Logs

What T-Rex did

  • T-Rex ran the requested verification for the pull request, but local artifact references were not uploaded.
  • T-Rex produced proof for posted P1 findings; see the corresponding review comments for details.

T-Rex Ran code and verified through T-Rex

Comments Outside Diff (1)

  1. General comment

    P1 Zero-length wire field shapes bypass decode validation and crash/reach SONIC task control

    • Bug
      • decode() accepts shapes such as [0] because it computes a zero-byte field and returns an empty ndarray. In the task poller, command start.flat[0] raises IndexError, planner movement.reshape(3) raises ValueError, and pose heading_increment first reaches apply_pose_message before flat[0] raises. These exceptions occur outside the decoder exception guard and can abort the coordinator's task tick rather than rejecting the malformed frame.
    • Cause
      • dimos/control/tasks/g1_sonic_wbc_task/zmq_wire.py:95-102 coerces header shapes and calculates size but does not require non-empty, valid field dimensions or validate expected control-field shapes before returning DecodedMessage. The task dispatch at g1_sonic_wbc_task.py:514, 518, and 521-539 assumes decoded arrays have usable sizes/shapes.
    • Fix
      • At zmq_wire.py:95, reject non-integer, empty, zero, and negative dimensions before calculating payload size; additionally enforce known command/planner/pose field schemas (scalar controls must contain exactly one value; movement/facing must contain three) in the codec before returning. Keep dispatch-side exception isolation as defense in depth.

    T-Rex Ran code and verified through T-Rex

Reviews (5): Last reviewed commit: "Merge remote-tracking branch 'origin/pim..." | Re-trigger Greptile

Comment on lines +98 to +100
_SONIC_RELEASE_DIR = Path(_env_model_dir) if _env_model_dir else LfsPath("sonic")
_env_planner = os.environ.get("SONIC_PLANNER_PATH")
_SONIC_PLANNER_PATH = Path(_env_planner) if _env_planner else LfsPath("sonic/planner_sonic.onnx")

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.

P1 SONIC model paths resolve during Ubuntu validation

unitree-g1-sonic-wbc is not in SELF_HOSTED_BLUEPRINTS, so it is included in UBUNTU_BLUEPRINTS. The normal Ubuntu validation imports this blueprint, and module-level task configuration converts these SONIC LfsPath values to strings. That invokes get_data() and fails with RuntimeError: Missing required tools: git-lfs on the Ubuntu runner. Add this blueprint to SELF_HOSTED_BLUEPRINTS so the LFS-backed configuration is validated in the intended environment.

Artifacts

Narrow SONIC blueprint validation reproduction script

  • Authored script computes Ubuntu selection from the production allowlist and invokes the production `_check_blueprint` path, with an in-memory self-hosted comparison mode; takeaway: it exercises the finding without changing production code.

Captured SONIC reproduction script source

  • Executed SHA-256 and source capture of the authored reproduction script; takeaway: the test harness used for both observed runs is traceable.

Ubuntu-selected SONIC blueprint import fails without Git LFS

  • The executed production `_check_blueprint("unitree-g1-sonic-wbc")` run reports `selected_ubuntu=True`, no Git LFS, and fails through `LfsPath.__str__` and `get_data`; takeaway: the reported import-time LFS failure is reproduced.

Exact pytest SONIC Ubuntu blueprint validation failure

  • The exact `test_blueprint_is_valid[unitree-g1-sonic-wbc]` pytest node fails at module line 245 after `LfsPath` calls `get_data` and detects missing `git-lfs`; takeaway: normal Ubuntu blueprint validation has the same failure.

In-memory self-hosted routing excludes SONIC from Ubuntu validation

  • The same reproduction script with only an in-memory self-hosted routing addition reports `selected_ubuntu=False` and does not call the import check; takeaway: adding the blueprint to the self-hosted allowlist prevents this Ubuntu failure.

View artifacts

T-Rex Ran code and verified through T-Rex

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

The SONIC blueprint is now assigned to self-hosted validation, and SONIC model downloads happen explicitly through dimos-sonic-models rather than during blueprint import.

Comment on lines +29 to +30
"start",
"set_locomotion_mode",

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.

P2 Velocity RPC bypasses the declared command contract

G1SonicWBCTask implements set_velocity_command, but TASK_EXPOSES does not declare it. As a result, ControlCoordinator.task_invoke takes the undeclared reflective-dispatch path, emits an undeclared-command warning, and does not apply the coordinator's command signature validation. Add set_velocity_command to the exposure list so callers receive the normal validated RPC behavior.

Artifacts

Narrow coordinator and registry harness source

  • This authored harness registers a task with the production velocity-command signature and invokes it through the real registry and ControlCoordinator path, showing the manifest-dependent behavior.

Coordinator output with the shipped g1_sonic_wbc manifest

  • The executed shipped-manifest run shows the command absent from coordinator commands, undeclared-dispatch warnings, and the raw method bad-keyword error, confirming the finding.

Coordinator output after declaring set_velocity_command

  • The executed comparison run adds only the missing registry exposure and shows coordinator signature validation rejecting the bad keyword while the valid command still dispatches, proving the intended fix.

View artifacts

T-Rex Ran code and verified through T-Rex

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

set_velocity_command is now included in TASK_EXPOSES, so coordinator calls use the declared command validation.

Comment on lines +551 to +556
if cmd.delta_heading is not None:
logger.info(
"ZMQ delta_heading received (not yet applied)",
task=self._name,
delta_heading=cmd.delta_heading,
)

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.

P1 Command-wire heading updates are discarded

_on_wire_command receives a decoded cmd.delta_heading but only logs it as received; it never calls self._pipeline.apply_heading_increment(...). A SONIC command message can therefore successfully carry an operator yaw adjustment while the controller silently ignores it. Forward the decoded value to the pipeline when it is present.

Artifacts

SONIC command delta-heading reproduction script

  • This authored script constructs a packed SONIC command message, decodes it with the repository codec, and invokes the repository command handler to assert that delta heading reaches the pipeline; takeaway: the script is the executable reproduction.

SONIC command delta-heading decode capture

  • This executed decode-only capture shows the packed command message preserves `planner=True` and `delta_heading=0.75` before command handling; takeaway: the wire decoder correctly receives the heading increment.

SONIC command delta-heading handler failure

  • This executed handler capture shows `heading_increments=[]` after handling the decoded command and ends in the assertion that the heading increment was not applied; takeaway: the handler discards a valid operator heading command.

SONIC prior concerns validation log

  • This executed source assertion log confirms `set_velocity_command` is in `TASK_EXPOSES`, the SONIC blueprint is self-hosted, and Ubuntu selection subtracts self-hosted blueprints; takeaway: both prior concerns are fixed.

View artifacts

T-Rex Ran code and verified through T-Rex

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

The ZMQ command handler has been removed, so the code path that discarded heading commands no longer exists.

Comment on lines +95 to +102
shape = tuple(int(v) for v in f.get("shape", [1]))
nbytes = int(np.prod(shape)) * dtype.itemsize
if offset + nbytes > len(payload):
raise ValueError(
f"{topic}: payload underrun at field {name!r} ({offset + nbytes} > {len(payload)})"
)
arr = np.frombuffer(payload, dtype=dtype, count=int(np.prod(shape)), offset=offset)
msg.fields[name] = arr.reshape(shape).copy()

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.

P1 security Zero-length wire fields crash controller dispatch

decode() accepts a declared shape such as [0] and returns an empty array. The task poller assumes decoded control arrays have elements: command fields raise IndexError at flat[0], planner movement raises during reshape(3), and pose data reaches pose handling before failing. A malformed SONIC ZMQ frame can therefore abort a controller tick instead of being rejected. Reject empty, zero, negative, and otherwise invalid dimensions in the decoder, and validate the expected control-field schemas before dispatch.

T-Rex Ran code and verified through T-Rex

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

The ZMQ decoder and its controller dispatch path have been removed from this integration.

@TomCC7 TomCC7 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I don't see why we need zmq protocol involved here. @Nabla7 wondering why you choosed this from the first place. do you intend to let our integration work with some external nvidia tool? if not I think only porting the model will be the better option.

Comment thread data/.lfs/sonic.tar.gz Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I have no idea why we keep adding model (which was on huggingface) to lfs. should just pull from huggingface

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Models now download from nvidia/GEAR-SONIC on Hugging Face using a pinned revision and SHA-256 verification, and the SONIC model archive has been removed from Git LFS.

if len(body) < HEADER_SIZE:
raise ValueError(f"{topic}: body shorter than header ({len(body)} < {HEADER_SIZE})")
header_json = body[:HEADER_SIZE].rstrip(b"\x00")
header: dict[str, Any] = json.loads(header_json)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

can use pydantic model directly instead of manual decode and field validation

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

The ZMQ wire decoder has been removed entirely, so there is no longer a manual decoder to replace with Pydantic.

error: str | None = None


def infer_protocol_version(fields: dict[str, NDArray]) -> int:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

this should better be determined once and cached instead of inferring every frame?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

NVIDIA also remembers the first version and checks later messages for changes; our equivalent check only involves a few dictionary lookups.

if self._active_protocol is None:
self._active_protocol = protocol
elif self._active_protocol != protocol:
result.error = f"protocol version changed {self._active_protocol} -> {protocol}"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I wonder in what case would version change

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

The format shouldn’t change during a stream, so this check rejects inconsistent input, following NVIDIA’s rule.

@Nabla7
Nabla7 requested a review from aclauer as a code owner September 1, 2026 20:14
@Nabla7 Nabla7 added the backport:skip Skip creating a backport to any release branches label Sep 15, 2026

@github-actions github-actions Bot 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.

go2 replay realtime

Details
Benchmark suite Current: 1ae8524 Previous: 576d547 Ratio
first frame wall 8.203 s 9.922 s 0.83
first frame cpu 17.113 s 20.847 s 0.82
run cpu 26.06 s 29.144 s 0.89
run cpu (user) 19.527 s 21.535 s 0.91
run cpu (system) 6.533 s 7.609 s 0.86
peak memory 2705.773 MB 2715.977 MB 1.00
peak threads 403 threads 409 threads 0.99
disk read 19.816 MB 29.492 MB 0.67
disk write 1374.336 MB 753.289 MB 1.82

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions github-actions Bot 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.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark 'go2 replay realtime'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.08.

Benchmark suite Current: 1ae8524 Previous: 576d547 Ratio
disk write 1374.336 MB 753.289 MB 1.82

This comment was automatically generated by workflow using github-action-benchmark.

@Nabla7
Nabla7 force-pushed the pim/feat/g1-sonic-wbc branch from 7dc65b2 to 4ff2529 Compare September 28, 2026 14:54
@Nabla7
Nabla7 changed the base branch from main to pim/feat/g1-sonic-inference September 28, 2026 14:54
@Nabla7
Nabla7 added this pull request to stack #4307 September 28, 2026 14:55
@Nabla7 Nabla7 changed the title SONIC whole-body controller for the G1 Run G1 SONIC through a standalone connection module Oct 6, 2026
@Nabla7 Nabla7 changed the title Run G1 SONIC through a standalone connection module Integrate G1 SONIC connection with ControlCoordinator Oct 6, 2026
@Nabla7 Nabla7 changed the title Integrate G1 SONIC connection with ControlCoordinator Integrate standalone G1 SONIC connection and blueprint Oct 12, 2026
@Nabla7 Nabla7 changed the title Integrate standalone G1 SONIC connection and blueprint Integrate standalone G1 SONIC policy and blueprint Oct 12, 2026

@github-actions github-actions Bot 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.

go2 replay realtime (arm64)

Details
Benchmark suite Current: 5c3c04f Previous: c3f0add Ratio
peak memory 1810.316 MB 1762.234 MB 1.03
peak threads 352 threads 359 threads 0.98
network (transport) 2736.232 MB 2735.794 MB 1.00
disk write 1.699 MB 1.699 MB 1
instructions 137.594 G 137.654 G 1.00

This comment was automatically generated by workflow using github-action-benchmark.

This branch was previously deployed

1 inactive (outdated) deployment
cachix — 4ac3fb63 Deployed Oct 23, 2026 by Nabla7 via cachix-build-macos #14110
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport:skip Skip creating a backport to any release branches

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants