Skip to content

feat(policy): add replaceable action-chunk inference API - #3

Merged
qiankunli merged 1 commit into
mainfrom
worktree-policy-api
Oct 7, 2026
Merged

qiankunli merged 1 commit into
mainfrom
worktree-policy-api

Conversation

@qiankunli

Copy link
Copy Markdown
Contributor

Add a typed Policy.infer interface and HTTP service for task text, timestamped observations and history to decoded Microduck joint action chunks. FakePolicy and HttpPolicy share the interface, allowing a learned backend to replace rules without changing robotd.

The runner consumes latest robot.state feedback, trims expired predictions without rebasing timestamps, and submits through the existing robotd Action Session. It releases ownership on completion or failure and cannot reacquire control after an external stop. Add interface documentation, runnable examples and CI coverage.

Validation: make fix and make lint passed (Ruff formatting/lint and strict mypy). On Debian devbox, robotd built from this checkout with Rust 1.99; all 14 Python tests passed, including four real HTTP/Unix IPC/robotd/FakeIo tests for measured head motion, replacement, stop during inference, errors and timeout cleanup. git diff --check passed.

Scope: FakeIo execution is verified. Camera acquisition, trained VLA integration, MuJoCo balance and physical robot operation are not implemented or validated by this change; the existing fake/sim-only action admission remains unchanged.

Add a typed Policy.infer interface and HTTP service for task text, timestamped observations and history to decoded Microduck joint action chunks. FakePolicy and HttpPolicy share the interface, allowing a learned backend to replace rules without changing robotd.

The runner consumes latest robot.state feedback, trims expired predictions without rebasing timestamps, and submits through the existing robotd Action Session. It releases ownership on completion or failure and cannot reacquire control after an external stop. Add interface documentation, runnable examples and CI coverage.

Validation: make fix and make lint passed (Ruff formatting/lint and strict mypy). On Debian devbox, robotd built from this checkout with Rust 1.99; all 14 Python tests passed, including four real HTTP/Unix IPC/robotd/FakeIo tests for measured head motion, replacement, stop during inference, errors and timeout cleanup. git diff --check passed.

Scope: FakeIo execution is verified. Camera acquisition, trained VLA integration, MuJoCo balance and physical robot operation are not implemented or validated by this change; the existing fake/sim-only action admission remains unchanged.
@qiankunli
qiankunli merged commit 20c8cf5 into main Oct 7, 2026
4 of 5 checks passed
@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown

Coverage

73.16% lines on this branch, against a floor of 70%.

Per-file
Filename                              Regions    Missed Regions     Cover   Functions  Missed Functions  Executed       Lines      Missed Lines     Cover    Branches   Missed Branches     Cover
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
btd/src/bluez.rs                          533               533     0.00%          35                35     0.00%         346               346     0.00%           0                 0         -
btd/src/chorale.rs                        346               246    28.90%          23                13    43.48%         231               172    25.54%           0                 0         -
btd/src/link.rs                            24                 0   100.00%           3                 0   100.00%          26                 0   100.00%           0                 0         -
btd/src/main.rs                            77                77     0.00%          11                11     0.00%          77                77     0.00%           0                 0         -
btd/src/pairing.rs                        149                 2    98.66%          12                 1    91.67%          81                 1    98.77%           0                 0         -
btd/src/route.rs                          377                36    90.45%          29                 0   100.00%         369                12    96.75%           0                 0         -
btd/src/session.rs                       1218                73    94.01%          71                 5    92.96%         706                41    94.19%           0                 0         -
btd/src/upstream.rs                       397                35    91.18%          34                 8    76.47%         242                19    92.15%           0                 0         -
configd/src/bluez.rs                      586               498    15.02%          85                79     7.06%         375               326    13.07%           0                 0         -
configd/src/identity.rs                   111                 5    95.50%          12                 1    91.67%          52                 3    94.23%           0                 0         -
configd/src/logs.rs                       314                33    89.49%          31                 3    90.32%         219                36    83.56%           0                 0         -
configd/src/main.rs                       522               522     0.00%          38                38     0.00%         348               348     0.00%           0                 0         -
configd/src/net.rs                        246                12    95.12%          38                 2    94.74%         181                 4    97.79%           0                 0         -
configd/src/nm.rs                         271               213    21.40%          43                39     9.30%         171               120    29.82%           0                 0         -
configd/src/pad.rs                        379                13    96.57%          38                 2    94.74%         222                 8    96.40%           0                 0         -
configd/src/power.rs                       30                30     0.00%           6                 6     0.00%          28                28     0.00%           0                 0         -
configd/src/store.rs                      350                25    92.86%          28                 2    92.86%         173                 9    94.80%           0                 0         -
configd/src/units.rs                      183               116    36.61%          24                18    25.00%         116                79    31.90%           0                 0         -
duck-ble/src/adv.rs                       138                 0   100.00%          13                 0   100.00%          65                 0   100.00%           0                 0         -
duck-ble/src/framing.rs                   281                 9    96.80%          25                 1    96.00%         140                 5    96.43%           0                 0         -
duck-ble/src/gatt.rs                        3                 0   100.00%           1                 0   100.00%           3                 0   100.00%           0                 0         -
duck-control/src/bus.rs                   623               487    21.83%          54                39    27.78%         418               331    20.81%           0                 0         -
duck-control/src/fall.rs                  173                 0   100.00%          15                 0   100.00%         108                 0   100.00%           0                 0         -
duck-control/src/imu.rs                   370                 8    97.84%          20                 0   100.00%         195                 5    97.44%           0                 0         -
duck-control/src/io.rs                    154                14    90.91%          27                 4    85.19%         142                14    90.14%           0                 0         -
duck-control/src/model.rs                 156                 2    98.72%          19                 0   100.00%          95                 0   100.00%           0                 0         -
duck-control/src/obs.rs                   263                 6    97.72%          24                 2    91.67%         177                 8    95.48%           0                 0         -
duck-control/src/policy.rs                701               560    20.11%          67                47    29.85%         452               347    23.23%           0                 0         -
duck-control/src/safety.rs                686                11    98.40%          47                 0   100.00%         416                 4    99.04%           0                 0         -
duck-control/src/sim.rs                   464                62    86.64%          34                10    70.59%         249                39    84.34%           0                 0         -
duck-detect/src/bin/duck-bench.rs         306               306     0.00%          16                16     0.00%         170               170     0.00%           0                 0         -
duck-detect/src/lib.rs                    258                 1    99.61%          14                 0   100.00%         149                 0   100.00%           0                 0         -
duck-detect/src/onnx.rs                    96                96     0.00%           5                 5     0.00%          52                52     0.00%           0                 0         -
duck-detect/src/rknn.rs                   267               237    11.24%          15                11    26.67%         216               195     9.72%           0                 0         -
duck-ether/src/main.rs                    504               404    19.84%          27                16    40.74%         270               217    19.63%           0                 0         -
duck-ipc-proto/src/lib.rs                2282               182    92.02%         149                17    88.59%        1643                96    94.16%           0                 0         -
duckctl/src/main.rs                      2895              1151    60.24%         175                53    69.71%        1788               728    59.28%           0                 0         -
kinematics/src/hand.rs                    394                 2    99.49%          22                 2    90.91%         181                 2    98.90%           0                 0         -
kinematics/src/head.rs                    405                 9    97.78%          22                 0   100.00%         196                 4    97.96%           0                 0         -
kinematics/src/lib.rs                     348                10    97.13%          23                 1    95.65%         174                 7    95.98%           0                 0         -
kinematics/src/math.rs                    194                 0   100.00%          16                 0   100.00%          82                 0   100.00%           0                 0         -
kinematics/src/mjcf.rs                    237                32    86.50%          17                 1    94.12%         134                15    88.81%           0                 0         -
kinematics/src/tof.rs                     365                17    95.34%          14                 0   100.00%         190                10    94.74%           0                 0         -
mediad/src/camera.rs                      291                 5    98.28%          21                 0   100.00%         204                 5    97.55%           0                 0         -
mediad/src/config.rs                       87                 5    94.25%           7                 1    85.71%          46                 4    91.30%           0                 0         -
mediad/src/detect.rs                      293               222    24.23%          13                 9    30.77%         200               145    27.50%           0                 0         -
mediad/src/exposure.rs                    496               170    65.73%          35                 8    77.14%         338               117    65.38%           0                 0         -
mediad/src/frame.rs                       683                54    92.09%          35                 1    97.14%         392                18    95.41%           0                 0         -
mediad/src/main.rs                        415               415     0.00%          11                11     0.00%         276               276     0.00%           0                 0         -
mediad/src/pipeline.rs                   1960              1686    13.98%         130               103    20.77%        1272              1079    15.17%           0                 0         -
mediad/src/producer.rs                    183                34    81.42%          22                 5    77.27%         137                21    84.67%           0                 0         -
mediad/src/relay.rs                      2391               244    89.80%         189                28    85.19%        1623               176    89.16%           0                 0         -
mediad/src/route.rs                       181                19    89.50%          12                 0   100.00%         156                 8    94.87%           0                 0         -
mediad/src/session.rs                     671                21    96.87%          37                 0   100.00%         428                18    95.79%           0                 0         -
mediad/src/snapshot.rs                    174                15    91.38%          10                 0   100.00%         108                 2    98.15%           0                 0         -
mediad/src/stream.rs                      826               129    84.38%          55                 9    83.64%         523                87    83.37%           0                 0         -
mediad/src/turn.rs                        487                32    93.43%          44                 3    93.18%         299                17    94.31%           0                 0         -
mediad/src/upstream.rs                    263                16    93.92%          17                 1    94.12%         160                12    92.50%           0                 0         -
mediad/src/web.rs                         339                30    91.15%          28                 4    85.71%         216                19    91.20%           0                 0         -
odometry/src/anchors.rs                     5                 0   100.00%           1                 0   100.00%           3                 0   100.00%           0                 0         -
odometry/src/lib.rs                       445                80    82.02%          28                 5    82.14%         254                50    80.31%           0                 0         -
pad-imu/src/lib.rs                        608                 7    98.85%          39                 0   100.00%         372                 5    98.66%           0                 0         -
padd/src/main.rs                         1162               621    46.56%          40                14    65.00%         701               425    39.37%           0                 0         -
padd/src/tap.rs                          1311               681    48.05%          74                36    51.35%         790               407    48.48%           0                 0         -
pet-detect/src/bin/detect.rs               61                61     0.00%           1                 1     0.00%          38                38     0.00%           0                 0         -
pet-detect/src/bin/features.rs             46                46     0.00%           2                 2     0.00%          20                20     0.00%           0                 0         -
pet-detect/src/lib.rs                     362               184    49.17%          27                13    51.85%         224               122    45.54%           0                 0         -
pet-detect/src/worker.rs                  381               230    39.63%          24                14    41.67%         276               160    42.03%           0                 0         -
robotctl/src/actions.rs                    35                35     0.00%           3                 3     0.00%          18                18     0.00%           0                 0         -
robotctl/src/camera.rs                    350                 9    97.43%          20                 0   100.00%         163                 3    98.16%           0                 0         -
robotctl/src/cells.rs                      43                 1    97.67%           2                 0   100.00%          22                 1    95.45%           0                 0         -
robotctl/src/configure.rs                1596               477    70.11%          61                12    80.33%         820               322    60.73%           0                 0         -
robotctl/src/duck.rs                     1172               143    87.80%          63                 1    98.41%         586                46    92.15%           0                 0         -
robotctl/src/frame.rs                     231                13    94.37%           9                 0   100.00%         129                 1    99.22%           0                 0         -
robotctl/src/imu_view.rs                  266                25    90.60%          19                 2    89.47%         173                19    89.02%           0                 0         -
robotctl/src/main.rs                     6052              2880    52.41%         346               136    60.69%        4135              1954    52.74%           0                 0         -
robotctl/src/monitor.rs                  4614               804    82.57%         234                38    83.76%        2917               518    82.24%           0                 0         -
robotctl/src/path_map.rs                  425                59    86.12%          24                 2    91.67%         223                36    83.86%           0                 0         -
robotctl/src/show.rs                      714                46    93.56%          31                 1    96.77%         509                25    95.09%           0                 0         -
robotd-params/src/edit.rs                1907               120    93.71%         114                14    87.72%         930                52    94.41%           0                 0         -
robotd-params/src/lib.rs                 1978                94    95.25%         182                 9    95.05%        1419                54    96.19%           0                 0         -
robotd-params/src/registry.rs             193                10    94.82%          15                 2    86.67%         144                17    88.19%           0                 0         -
robotd/src/action_chunk.rs                354                29    91.81%          30                 3    90.00%         287                15    94.77%           0                 0         -
robotd/src/chorale.rs                    1366                30    97.80%          71                 4    94.37%         826                20    97.58%           0                 0         -
robotd/src/control.rs                     450               411     8.67%          29                24    17.24%         355               307    13.52%           0                 0         -
robotd/src/intents.rs                     419                74    82.34%          48                 9    81.25%         308                49    84.09%           0                 0         -
robotd/src/main.rs                       8220              1426    82.65%         417                49    88.25%        5293               948    82.09%           0                 0         -
robotd/src/soc.rs                         413                47    88.62%          22                 2    90.91%         182                29    84.07%           0                 0         -
robotd/src/sound.rs                       968               692    28.51%          50                34    32.00%         565               420    25.66%           0                 0         -
robotd/src/theremin.rs                    472               112    76.27%          32                12    62.50%         271                64    76.38%           0                 0         -
sounds/src/chorale/beat.rs                403                16    96.03%          26                 1    96.15%         246                12    95.12%           0                 0         -
sounds/src/chorale/midi.rs               1047                80    92.36%          44                 2    95.45%         581                43    92.60%           0                 0         -
sounds/src/chorale/mod.rs                1423                57    95.99%          83                 3    96.39%         812                41    94.95%           0                 0         -
sounds/src/chorale/text.rs                700                60    91.43%          41                12    70.73%         376                17    95.48%           0                 0         -
sounds/src/lib.rs                         167                35    79.04%          14                 6    57.14%          87                21    75.86%           0                 0         -
sounds/src/main.rs                        463               463     0.00%          20                20     0.00%         240               240     0.00%           0                 0         -
sounds/src/personality.rs                 174                 0   100.00%           6                 0   100.00%          84                 0   100.00%           0                 0         -
sounds/src/rng.rs                         173                 0   100.00%          18                 0   100.00%          96                 0   100.00%           0                 0         -
sounds/src/stream.rs                      719                 7    99.03%          46                 1    97.83%         420                 6    98.57%           0                 0         -
sounds/src/synth.rs                       353                 7    98.02%          29                 0   100.00%         197                 3    98.48%           0                 0         -
sounds/src/voices.rs                      679                 2    99.71%          26                 0   100.00%         353                 2    99.43%           0                 0         -
test-support/src/lib.rs                   272                 2    99.26%          22                 0   100.00%         167                 0   100.00%           0                 0         -
tof/src/config.rs                          42                 8    80.95%           4                 1    75.00%          23                 7    69.57%           0                 0         -
tof/src/imu.rs                            227               157    30.84%          10                 5    50.00%         139                95    31.65%           0                 0         -
tof/src/lib.rs                             88                 0   100.00%           9                 0   100.00%          54                 0   100.00%           0                 0         -
tof/src/main.rs                          1001               633    36.76%          46                19    58.70%         638               401    37.15%           0                 0         -
tof/src/sensor.rs                         230               148    35.65%          22                15    31.82%         163               114    30.06%           0                 0         -
tof/src/status.rs                          76                 2    97.37%           7                 1    85.71%          58                 1    98.28%           0                 0         -
updater/src/account.rs                     93                 5    94.62%          10                 1    90.00%          79                 3    96.20%           0                 0         -
updater/src/config.rs                     496                25    94.96%          42                 4    90.48%         422                17    95.97%           0                 0         -
updater/src/engine.rs                    3450               506    85.33%         229                31    86.46%        2225               327    85.30%           0                 0         -
updater/src/faults.rs                      71                 8    88.73%           7                 0   100.00%          52                 0   100.00%           0                 0         -
updater/src/fsutil.rs                     104                30    71.15%          10                 6    40.00%          51                24    52.94%           0                 0         -
updater/src/hooks.rs                      492                16    96.75%          40                 2    95.00%         416                13    96.88%           0                 0         -
updater/src/ipc.rs                        933               333    64.31%          68                20    70.59%         581               179    69.19%           0                 0         -
updater/src/journal.rs                   1087                85    92.18%          74                11    85.14%         592                55    90.71%           0                 0         -
updater/src/lib.rs                         55                16    70.91%           5                 0   100.00%          41                14    65.85%           0                 0         -
updater/src/main.rs                       552               224    59.42%          38                14    63.16%         423               154    63.59%           0                 0         -
updater/src/manifest.rs                   159                 6    96.23%          16                 0   100.00%         110                 1    99.09%           0                 0         -
updater/src/orphan.rs                     288                 6    97.92%          25                 0   100.00%         181                 3    98.34%           0                 0         -
updater/src/policy.rs                    1883               698    62.93%         159                60    62.26%        1006               386    61.63%           0                 0         -
updater/src/preflight.rs                  382                16    95.81%          47                 4    91.49%         284                11    96.13%           0                 0         -
updater/src/reconcile.rs                  292                15    94.86%          25                 3    88.00%         172                 5    97.09%           0                 0         -
updater/src/robot.rs                      288                33    88.54%          41                10    75.61%         189                21    88.89%           0                 0         -
updater/src/source/github.rs              494               188    61.94%          53                28    47.17%         316               108    65.82%           0                 0         -
updater/src/source/hf_hub.rs              136                72    47.06%          20                12    40.00%          81                41    49.38%           0                 0         -
updater/src/source/http.rs                377                89    76.39%          32                10    68.75%         295                91    69.15%           0                 0         -
updater/src/source/local.rs               346                33    90.46%          36                 8    77.78%         192                23    88.02%           0                 0         -
updater/src/source/mod.rs                  39                30    23.08%           4                 2    50.00%          30                24    20.00%           0                 0         -
updater/src/spawn.rs                       94                13    86.17%           5                 0   100.00%          49                 4    91.84%           0                 0         -
updater/src/store.rs                      593                41    93.09%          43                 7    83.72%         271                42    84.50%           0                 0         -
updater/src/transcript.rs                 518                42    91.89%          31                 3    90.32%         290                22    92.41%           0                 0         -
updater/src/unix.rs                        44                 3    93.18%           3                 0   100.00%          22                 2    90.91%           0                 0         -
updater/src/verify.rs                     786                95    87.91%          55                18    67.27%         424                75    82.31%           0                 0         -
uyvy/src/lib.rs                           383                14    96.34%          13                 0   100.00%         184                 8    95.65%           0                 0         -
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TOTAL                                   87707             22938    73.85%        5750              1453    74.73%       54711             14683    73.16%           0                 0         -

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants