Skip to content

feat: integrate rust daemon behind a flag#719

Open
CougarTasker wants to merge 1 commit into
feat/rust-daemon-setupfrom
feat/rust-daemon-integration
Open

feat: integrate rust daemon behind a flag#719
CougarTasker wants to merge 1 commit into
feat/rust-daemon-setupfrom
feat/rust-daemon-integration

Conversation

@CougarTasker

@CougarTasker CougarTasker commented Jun 17, 2026

Copy link
Copy Markdown
Member

Features

  • Dispatches to the Rust daemon binary and native producer only when NCD_RUST_DAEMON is truthy; the Python daemon stays the default, so behaviour is unchanged out of the box.
  • Bundles the compiled binary and producer cdylib into the wheel (setup.py, MANIFEST.in, build_wheel_artefacts.sh) and adds the build-wheels CI workflow.
  • Adds unit tests for the gating layer.

Bugfixes

  • None

Items

Related PRs

@CougarTasker CougarTasker self-assigned this Jun 17, 2026
@CougarTasker CougarTasker added the version:minor non-breaking feature updates, new functions or endpoints label Jun 17, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Consider updating changelogs/pending-changelog.md with a summary of this change for the release notes. This is optional and non-blocking.

@CougarTasker CougarTasker force-pushed the feat/rust-daemon-setup branch from b3a4d47 to eb7c452 Compare June 17, 2026 23:54
@CougarTasker CougarTasker force-pushed the feat/rust-daemon-integration branch from ac12415 to 733fc8f Compare June 17, 2026 23:54
@CougarTasker CougarTasker changed the title feat: wire and package the Rust data daemon (dark, default-off) feat: integrate rust daemon behind a flag Jun 17, 2026
@CougarTasker CougarTasker force-pushed the feat/rust-daemon-integration branch from 733fc8f to d306696 Compare June 18, 2026 00:19
@CougarTasker CougarTasker force-pushed the feat/rust-daemon-setup branch from eb7c452 to 4329915 Compare June 18, 2026 00:23
@CougarTasker CougarTasker force-pushed the feat/rust-daemon-integration branch from d306696 to 4eef1da Compare June 18, 2026 00:23
@CougarTasker CougarTasker force-pushed the feat/rust-daemon-setup branch from 4329915 to 9b03330 Compare June 18, 2026 00:23
@CougarTasker CougarTasker force-pushed the feat/rust-daemon-integration branch from 4eef1da to 51b4e8e Compare June 18, 2026 00:24
@CougarTasker CougarTasker force-pushed the feat/rust-daemon-setup branch from 9b03330 to aeb78d2 Compare June 18, 2026 17:34
@CougarTasker CougarTasker force-pushed the feat/rust-daemon-integration branch from 51b4e8e to 04f8f1b Compare June 18, 2026 17:34
@CougarTasker CougarTasker marked this pull request as ready for review June 18, 2026 17:55
@CougarTasker CougarTasker force-pushed the feat/rust-daemon-setup branch from aeb78d2 to e3bf235 Compare June 18, 2026 17:59
@CougarTasker CougarTasker force-pushed the feat/rust-daemon-integration branch 2 times, most recently from 56da482 to 2cde023 Compare June 19, 2026 07:31
@CougarTasker CougarTasker force-pushed the feat/rust-daemon-setup branch from e3bf235 to 5e506c1 Compare June 19, 2026 07:31
@CougarTasker CougarTasker force-pushed the feat/rust-daemon-integration branch from 2cde023 to ead7362 Compare June 25, 2026 00:20
@CougarTasker CougarTasker force-pushed the feat/rust-daemon-setup branch from 5e506c1 to 96206d2 Compare June 25, 2026 00:20
Comment thread neuracore/api/globals.py
_has_validated_version = False
_active_robot: Robot | None = None
_active_dataset_id: str | None = None
_active_dataset: "Dataset | None" = None

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.

do we need active_dataset_id if we can pull it off dataset now?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

No, technically not but it keeps the diff much smaller

Comment thread neuracore/api/logging.py


def _smoke_validate_joint_values(joint_data: dict[str, float]) -> None:
"""Smoke-test that a sample of joint values are floats.

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.

Add context to this pydoc about why we do this.

def prepare_recording_stopped(self) -> tuple[ProducerChannel, int]:
"""Mark the producer channel as stopping and return it."""
producer_channel = self.get_producer_channel()
def _on_producer_channel_ready(self) -> None:

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.

empty function?

# Serialize metadata and frame to bytes
# Frame is sent as raw numpy bytes with metadata as JSON header
frame_source = (
frame if frame.flags.c_contiguous else np.ascontiguousarray(frame)

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.

lol

return
self.recording_robot_instances.pop(instance_key, None)
self._cancel_recording_timers(recording_id)
# Note: the native producer stop is driven by the recording context

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.

very verbose comment

@damonhayhurst-neuraco damonhayhurst-neuraco 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.

LGTM

@CougarTasker CougarTasker force-pushed the feat/rust-daemon-setup branch from 96206d2 to 875af2e Compare June 26, 2026 16:20
@CougarTasker CougarTasker force-pushed the feat/rust-daemon-integration branch from ead7362 to 4014df2 Compare June 26, 2026 16:20
@CougarTasker CougarTasker force-pushed the feat/rust-daemon-setup branch from 875af2e to 8d47d0a Compare June 26, 2026 16:40
@CougarTasker CougarTasker force-pushed the feat/rust-daemon-integration branch from 4014df2 to 7f3e237 Compare June 26, 2026 16:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

version:minor non-breaking feature updates, new functions or endpoints

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants