From 73137322e57a574fecbecd28b4c4f9ffbb328bcf Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Tue, 15 Sep 2026 17:50:47 -0300 Subject: [PATCH 1/4] sweep: add 17 community policies (happy-hop, step-up, academy, stilts x8, more) --- ...ni-microduck-moonwalk-backward-55e6af.json | 26 +++++++++++++++++ .../fffiloni-microduck-polite-bow-b1d864.json | 26 +++++++++++++++++ ...onessen-microduck-stilts-100cm-policy.json | 24 ++++++++++++++++ ...vonessen-microduck-stilts-10cm-policy.json | 24 ++++++++++++++++ ...onessen-microduck-stilts-140cm-policy.json | 24 ++++++++++++++++ ...vonessen-microduck-stilts-15cm-policy.json | 24 ++++++++++++++++ ...onessen-microduck-stilts-200cm-policy.json | 24 ++++++++++++++++ ...vonessen-microduck-stilts-20cm-policy.json | 24 ++++++++++++++++ ...vonessen-microduck-stilts-25cm-policy.json | 24 ++++++++++++++++ ...vonessen-microduck-stilts-50cm-policy.json | 24 ++++++++++++++++ .../policies/joanfox-microduck-happy-hop.json | 28 +++++++++++++++++++ .../koyogi-hf-microduck-policy-run2.json | 23 +++++++++++++++ .../nupr-haokun-microduck-step-up.json | 24 ++++++++++++++++ ...tfrere-microduck-move-flat-out-sprint.json | 24 ++++++++++++++++ ...e-microduck-move-very-low-crouch-walk.json | 24 ++++++++++++++++ .../zhoumiaosen-microduck-running.json | 27 ++++++++++++++++++ ...houmiaosen-microduck-straight-running.json | 27 ++++++++++++++++++ tests/contributor-tools.test.ts | 2 +- tests/registry.test.ts | 2 +- tests/schema.test.ts | 2 +- 20 files changed, 424 insertions(+), 3 deletions(-) create mode 100644 registry/policies/fffiloni-microduck-moonwalk-backward-55e6af.json create mode 100644 registry/policies/fffiloni-microduck-polite-bow-b1d864.json create mode 100644 registry/policies/hannesvonessen-microduck-stilts-100cm-policy.json create mode 100644 registry/policies/hannesvonessen-microduck-stilts-10cm-policy.json create mode 100644 registry/policies/hannesvonessen-microduck-stilts-140cm-policy.json create mode 100644 registry/policies/hannesvonessen-microduck-stilts-15cm-policy.json create mode 100644 registry/policies/hannesvonessen-microduck-stilts-200cm-policy.json create mode 100644 registry/policies/hannesvonessen-microduck-stilts-20cm-policy.json create mode 100644 registry/policies/hannesvonessen-microduck-stilts-25cm-policy.json create mode 100644 registry/policies/hannesvonessen-microduck-stilts-50cm-policy.json create mode 100644 registry/policies/joanfox-microduck-happy-hop.json create mode 100644 registry/policies/koyogi-hf-microduck-policy-run2.json create mode 100644 registry/policies/nupr-haokun-microduck-step-up.json create mode 100644 registry/policies/tfrere-microduck-move-flat-out-sprint.json create mode 100644 registry/policies/tfrere-microduck-move-very-low-crouch-walk.json create mode 100644 registry/policies/zhoumiaosen-microduck-running.json create mode 100644 registry/policies/zhoumiaosen-microduck-straight-running.json diff --git a/registry/policies/fffiloni-microduck-moonwalk-backward-55e6af.json b/registry/policies/fffiloni-microduck-moonwalk-backward-55e6af.json new file mode 100644 index 0000000..63d6304 --- /dev/null +++ b/registry/policies/fffiloni-microduck-moonwalk-backward-55e6af.json @@ -0,0 +1,26 @@ +{ + "id": "fffiloni-microduck-moonwalk-backward-55e6af", + "source": { + "provider": "huggingface-model", + "repo": "fffiloni/microduck-moonwalk-backward-55e6af", + "revision": "951073cb7791a898e3e5ecb242c5bcccf40aa72f", + "artifact_path": "policy.onnx", + "artifact_sha256": "924e0bb28bc4ea5610cc8eeb9e5973e2bad467698984da2f13a8426a84c518c4", + "manifest_path": null, + "manifest_sha256": null + }, + "curation": { + "category": "agility-tricks", + "tags": ["community", "motion-lab", "moonwalk", "simulation-only", "50hz"], + "name": "Moonwalk Backward", + "summary": "Moonwalk-style backward gliding gait with alternating feet and stable upright torso, finishing in standing; generated with Microduck Motion Lab.", + "details": "No machine-readable policy manifest is published with this artifact, so runtime facts remain unknown. The publisher task is Mjlab-MotionLabMoonwalkBackward-Flat-MicroDuck (velocity recipe, 4000 PPO iterations); its deployment checks report a needs-review motion-quality gate with semantic match explicitly unverified. Upstream metadata declares no license, so reuse needs maintainer review.", + "authors": [{"name": "fffiloni", "url": "https://huggingface.co/fffiloni"}], + "notes": "No manifest is published and upstream metadata declares no license; the ONNX interface is inspected only. The publisher's own quality gate needs review and the semantic match is unverified. The registry records no independent hardware evidence.", + "requirements": {"robot_model": "microduck-standard", "accessories": [], "terrain": ["flat"]}, + "publisher_hardware": {"status": "not-claimed", "target": "Microduck v1 (14 Dynamixel XL330 servos)", "source_url": "https://huggingface.co/fffiloni/microduck-moonwalk-backward-55e6af", "note": "The publisher reports a headless CPU MuJoCo deployment rehearsal only and no physical MicroDuck deployment evidence."} + }, + "media": [ + {"type": "video", "url": "https://huggingface.co/fffiloni/microduck-moonwalk-backward-55e6af/resolve/951073cb7791a898e3e5ecb242c5bcccf40aa72f/preview.mp4", "label": "Publisher headless CPU deployment rehearsal"} + ] +} diff --git a/registry/policies/fffiloni-microduck-polite-bow-b1d864.json b/registry/policies/fffiloni-microduck-polite-bow-b1d864.json new file mode 100644 index 0000000..f22745f --- /dev/null +++ b/registry/policies/fffiloni-microduck-polite-bow-b1d864.json @@ -0,0 +1,26 @@ +{ + "id": "fffiloni-microduck-polite-bow-b1d864", + "source": { + "provider": "huggingface-model", + "repo": "fffiloni/microduck-polite-bow-b1d864", + "revision": "9a9d21a85cf7b5cbd1854c03ad58bd949502a5ea", + "artifact_path": "policy.onnx", + "artifact_sha256": "f2f777919cee080d2d172c635d4b6ead14c0e01a7065ac64bd21cc5fad14158c", + "manifest_path": null, + "manifest_sha256": null + }, + "curation": { + "category": "agility-tricks", + "tags": ["community", "motion-lab", "polite-bow", "simulation-only", "50hz"], + "name": "Polite Bow", + "summary": "Small gentle bow with head and body lowering, returning to standing; generated with Microduck Motion Lab from the official sim-to-real stack.", + "details": "No machine-readable policy manifest is published with this artifact, so runtime facts remain unknown. The publisher task is Mjlab-PoliteBow-Flat-MicroDuck (standup recipe, 4096 envs, 1000 PPO iterations); its deployment checks report passed export, 61D/14D contract and CPU rehearsal with the motion-quality gate passed. Upstream metadata declares no license, so reuse needs maintainer review.", + "authors": [{"name": "fffiloni", "url": "https://huggingface.co/fffiloni"}], + "notes": "No manifest is published and upstream metadata declares no license; the ONNX interface is inspected only. The publisher warns a simulation preview is not a guarantee of safe real-robot behavior. The registry records no independent hardware evidence.", + "requirements": {"robot_model": "microduck-standard", "accessories": [], "terrain": ["flat"]}, + "publisher_hardware": {"status": "not-claimed", "target": "Microduck v1 (14 Dynamixel XL330 servos)", "source_url": "https://huggingface.co/fffiloni/microduck-polite-bow-b1d864", "note": "The publisher reports a headless CPU MuJoCo deployment rehearsal only and no physical MicroDuck deployment evidence."} + }, + "media": [ + {"type": "video", "url": "https://huggingface.co/fffiloni/microduck-polite-bow-b1d864/resolve/9a9d21a85cf7b5cbd1854c03ad58bd949502a5ea/preview.mp4", "label": "Publisher headless CPU deployment rehearsal"} + ] +} diff --git a/registry/policies/hannesvonessen-microduck-stilts-100cm-policy.json b/registry/policies/hannesvonessen-microduck-stilts-100cm-policy.json new file mode 100644 index 0000000..a8c0cf2 --- /dev/null +++ b/registry/policies/hannesvonessen-microduck-stilts-100cm-policy.json @@ -0,0 +1,24 @@ +{ + "id": "hannesvonessen-microduck-stilts-100cm-policy", + "source": { + "provider": "huggingface-model", + "repo": "HannesVonEssen/microduck-stilts", + "revision": "8ec310d8f3a254b0f08b9d241f9f6f7bd04ee2ed", + "artifact_path": "100cm/policy.onnx", + "artifact_sha256": "5cfbbbc540a7316dce0d3c8fa91932cafe8ec97070439ebb6eb11076681d20e7", + "manifest_path": "manifest.json", + "manifest_sha256": "f1157f97be6b732092ecfe88119cc8ead14e19c5896c59a026330ee2cb4075a2" + }, + "curation": { + "category": "experimental", + "tags": ["community", "stilts", "100cm", "perpetual", "50hz", "simulation-only", "hardware-mod-required"], + "name": "Stilts Walk 100 cm", + "summary": "Perpetual stilt-walking policy for the 100 cm hardware variant, entered upright on matching stilts; simulation-only per its manifest.", + "details": "Trained on Mjlab-Stilt-Flat-MicroDuck with action_scale 1.0. The manifest requires hardware modifications (printable stilt geometry from Vottivott/microduck-playground hardware/stilts) and a held-pose command review, so there is no generic install route. This entry pins the 100 cm variant artifact; each stilt height is a separately reviewed entry.", + "authors": [{"name": "HannesVonEssen", "url": "https://huggingface.co/HannesVonEssen"}], + "license": "Apache-2.0", + "notes": "The package manifest is resolved and inspected; the held pose requires an explicit command and hold/unwind review. The registry records no independent hardware evidence.", + "requirements": {"robot_model": "microduck-standard", "accessories": ["100 cm printable stilts"], "terrain": ["flat"]}, + "publisher_hardware": {"status": "not-claimed", "target": "Microduck with 100 cm printable stilt hardware", "source_url": "https://huggingface.co/HannesVonEssen/microduck-stilts", "note": "The publisher manifest marks this policy simulation-only and requires hardware modifications; no physical MicroDuck deployment evidence is recorded."} + } +} diff --git a/registry/policies/hannesvonessen-microduck-stilts-10cm-policy.json b/registry/policies/hannesvonessen-microduck-stilts-10cm-policy.json new file mode 100644 index 0000000..4f329c2 --- /dev/null +++ b/registry/policies/hannesvonessen-microduck-stilts-10cm-policy.json @@ -0,0 +1,24 @@ +{ + "id": "hannesvonessen-microduck-stilts-10cm-policy", + "source": { + "provider": "huggingface-model", + "repo": "HannesVonEssen/microduck-stilts", + "revision": "8ec310d8f3a254b0f08b9d241f9f6f7bd04ee2ed", + "artifact_path": "10cm/policy.onnx", + "artifact_sha256": "2371538eb85c4540800b061e1f0dc4fce43b9097ac6983cde9a3c3ea10e173b3", + "manifest_path": "manifest.json", + "manifest_sha256": "f1157f97be6b732092ecfe88119cc8ead14e19c5896c59a026330ee2cb4075a2" + }, + "curation": { + "category": "experimental", + "tags": ["community", "stilts", "10cm", "perpetual", "50hz", "simulation-only", "hardware-mod-required"], + "name": "Stilts Walk 10 cm", + "summary": "Perpetual stilt-walking policy for the 10 cm hardware variant, entered upright on matching stilts; simulation-only per its manifest.", + "details": "Trained on Mjlab-Stilt-Flat-MicroDuck with action_scale 1.0. The manifest requires hardware modifications (printable stilt geometry from Vottivott/microduck-playground hardware/stilts) and a held-pose command review, so there is no generic install route. This entry pins the 10 cm variant artifact; each stilt height is a separately reviewed entry.", + "authors": [{"name": "HannesVonEssen", "url": "https://huggingface.co/HannesVonEssen"}], + "license": "Apache-2.0", + "notes": "The package manifest is resolved and inspected; the held pose requires an explicit command and hold/unwind review. The registry records no independent hardware evidence.", + "requirements": {"robot_model": "microduck-standard", "accessories": ["10 cm printable stilts"], "terrain": ["flat"]}, + "publisher_hardware": {"status": "not-claimed", "target": "Microduck with 10 cm printable stilt hardware", "source_url": "https://huggingface.co/HannesVonEssen/microduck-stilts", "note": "The publisher manifest marks this policy simulation-only and requires hardware modifications; no physical MicroDuck deployment evidence is recorded."} + } +} diff --git a/registry/policies/hannesvonessen-microduck-stilts-140cm-policy.json b/registry/policies/hannesvonessen-microduck-stilts-140cm-policy.json new file mode 100644 index 0000000..355a1d7 --- /dev/null +++ b/registry/policies/hannesvonessen-microduck-stilts-140cm-policy.json @@ -0,0 +1,24 @@ +{ + "id": "hannesvonessen-microduck-stilts-140cm-policy", + "source": { + "provider": "huggingface-model", + "repo": "HannesVonEssen/microduck-stilts", + "revision": "8ec310d8f3a254b0f08b9d241f9f6f7bd04ee2ed", + "artifact_path": "140cm/policy.onnx", + "artifact_sha256": "d1311669e6919c4be9d21227a60217130d296dc4849002ed7f04addd641c033f", + "manifest_path": "manifest.json", + "manifest_sha256": "f1157f97be6b732092ecfe88119cc8ead14e19c5896c59a026330ee2cb4075a2" + }, + "curation": { + "category": "experimental", + "tags": ["community", "stilts", "140cm", "perpetual", "50hz", "simulation-only", "hardware-mod-required"], + "name": "Stilts Walk 140 cm", + "summary": "Perpetual stilt-walking policy for the 140 cm hardware variant, entered upright on matching stilts; simulation-only per its manifest.", + "details": "Trained on Mjlab-Stilt-Flat-MicroDuck with action_scale 1.0. The manifest requires hardware modifications (printable stilt geometry from Vottivott/microduck-playground hardware/stilts) and a held-pose command review, so there is no generic install route. This entry pins the 140 cm variant artifact; each stilt height is a separately reviewed entry.", + "authors": [{"name": "HannesVonEssen", "url": "https://huggingface.co/HannesVonEssen"}], + "license": "Apache-2.0", + "notes": "The package manifest is resolved and inspected; the held pose requires an explicit command and hold/unwind review. The registry records no independent hardware evidence.", + "requirements": {"robot_model": "microduck-standard", "accessories": ["140 cm printable stilts"], "terrain": ["flat"]}, + "publisher_hardware": {"status": "not-claimed", "target": "Microduck with 140 cm printable stilt hardware", "source_url": "https://huggingface.co/HannesVonEssen/microduck-stilts", "note": "The publisher manifest marks this policy simulation-only and requires hardware modifications; no physical MicroDuck deployment evidence is recorded."} + } +} diff --git a/registry/policies/hannesvonessen-microduck-stilts-15cm-policy.json b/registry/policies/hannesvonessen-microduck-stilts-15cm-policy.json new file mode 100644 index 0000000..10fb578 --- /dev/null +++ b/registry/policies/hannesvonessen-microduck-stilts-15cm-policy.json @@ -0,0 +1,24 @@ +{ + "id": "hannesvonessen-microduck-stilts-15cm-policy", + "source": { + "provider": "huggingface-model", + "repo": "HannesVonEssen/microduck-stilts", + "revision": "8ec310d8f3a254b0f08b9d241f9f6f7bd04ee2ed", + "artifact_path": "15cm/policy.onnx", + "artifact_sha256": "563fe20f091a9cfe57abee8ce58a85276ad59af4b873079455ba684f5d3757b3", + "manifest_path": "manifest.json", + "manifest_sha256": "f1157f97be6b732092ecfe88119cc8ead14e19c5896c59a026330ee2cb4075a2" + }, + "curation": { + "category": "experimental", + "tags": ["community", "stilts", "15cm", "perpetual", "50hz", "simulation-only", "hardware-mod-required"], + "name": "Stilts Walk 15 cm", + "summary": "Perpetual stilt-walking policy for the 15 cm hardware variant, entered upright on matching stilts; simulation-only per its manifest.", + "details": "Trained on Mjlab-Stilt-Flat-MicroDuck with action_scale 1.0. The manifest requires hardware modifications (printable stilt geometry from Vottivott/microduck-playground hardware/stilts) and a held-pose command review, so there is no generic install route. This entry pins the 15 cm variant artifact; each stilt height is a separately reviewed entry.", + "authors": [{"name": "HannesVonEssen", "url": "https://huggingface.co/HannesVonEssen"}], + "license": "Apache-2.0", + "notes": "The package manifest is resolved and inspected; the held pose requires an explicit command and hold/unwind review. The registry records no independent hardware evidence.", + "requirements": {"robot_model": "microduck-standard", "accessories": ["15 cm printable stilts"], "terrain": ["flat"]}, + "publisher_hardware": {"status": "not-claimed", "target": "Microduck with 15 cm printable stilt hardware", "source_url": "https://huggingface.co/HannesVonEssen/microduck-stilts", "note": "The publisher manifest marks this policy simulation-only and requires hardware modifications; no physical MicroDuck deployment evidence is recorded."} + } +} diff --git a/registry/policies/hannesvonessen-microduck-stilts-200cm-policy.json b/registry/policies/hannesvonessen-microduck-stilts-200cm-policy.json new file mode 100644 index 0000000..90a0057 --- /dev/null +++ b/registry/policies/hannesvonessen-microduck-stilts-200cm-policy.json @@ -0,0 +1,24 @@ +{ + "id": "hannesvonessen-microduck-stilts-200cm-policy", + "source": { + "provider": "huggingface-model", + "repo": "HannesVonEssen/microduck-stilts", + "revision": "8ec310d8f3a254b0f08b9d241f9f6f7bd04ee2ed", + "artifact_path": "200cm/policy.onnx", + "artifact_sha256": "b772e2410c944bb54f3d07ff943210ea581a6fb35fe9824fa3c28ce62532c971", + "manifest_path": "manifest.json", + "manifest_sha256": "f1157f97be6b732092ecfe88119cc8ead14e19c5896c59a026330ee2cb4075a2" + }, + "curation": { + "category": "experimental", + "tags": ["community", "stilts", "200cm", "perpetual", "50hz", "simulation-only", "hardware-mod-required"], + "name": "Stilts Walk 200 cm", + "summary": "Perpetual stilt-walking policy for the 200 cm hardware variant, entered upright on matching stilts; simulation-only per its manifest.", + "details": "Trained on Mjlab-Stilt-Flat-MicroDuck with action_scale 1.0. The manifest requires hardware modifications (printable stilt geometry from Vottivott/microduck-playground hardware/stilts) and a held-pose command review, so there is no generic install route. This entry pins the 200 cm variant artifact; each stilt height is a separately reviewed entry.", + "authors": [{"name": "HannesVonEssen", "url": "https://huggingface.co/HannesVonEssen"}], + "license": "Apache-2.0", + "notes": "The package manifest is resolved and inspected; the held pose requires an explicit command and hold/unwind review. The registry records no independent hardware evidence.", + "requirements": {"robot_model": "microduck-standard", "accessories": ["200 cm printable stilts"], "terrain": ["flat"]}, + "publisher_hardware": {"status": "not-claimed", "target": "Microduck with 200 cm printable stilt hardware", "source_url": "https://huggingface.co/HannesVonEssen/microduck-stilts", "note": "The publisher manifest marks this policy simulation-only and requires hardware modifications; no physical MicroDuck deployment evidence is recorded."} + } +} diff --git a/registry/policies/hannesvonessen-microduck-stilts-20cm-policy.json b/registry/policies/hannesvonessen-microduck-stilts-20cm-policy.json new file mode 100644 index 0000000..ebfdb28 --- /dev/null +++ b/registry/policies/hannesvonessen-microduck-stilts-20cm-policy.json @@ -0,0 +1,24 @@ +{ + "id": "hannesvonessen-microduck-stilts-20cm-policy", + "source": { + "provider": "huggingface-model", + "repo": "HannesVonEssen/microduck-stilts", + "revision": "8ec310d8f3a254b0f08b9d241f9f6f7bd04ee2ed", + "artifact_path": "20cm/policy.onnx", + "artifact_sha256": "c9201cda19f8c48458e96a0c316eed8c1c800a67fa716460775f939c606e2c19", + "manifest_path": "manifest.json", + "manifest_sha256": "f1157f97be6b732092ecfe88119cc8ead14e19c5896c59a026330ee2cb4075a2" + }, + "curation": { + "category": "experimental", + "tags": ["community", "stilts", "20cm", "perpetual", "50hz", "simulation-only", "hardware-mod-required"], + "name": "Stilts Walk 20 cm", + "summary": "Perpetual stilt-walking policy for the 20 cm hardware variant, entered upright on matching stilts; simulation-only per its manifest.", + "details": "Trained on Mjlab-Stilt-Flat-MicroDuck with action_scale 1.0. The manifest requires hardware modifications (printable stilt geometry from Vottivott/microduck-playground hardware/stilts) and a held-pose command review, so there is no generic install route. This entry pins the 20 cm variant artifact; each stilt height is a separately reviewed entry.", + "authors": [{"name": "HannesVonEssen", "url": "https://huggingface.co/HannesVonEssen"}], + "license": "Apache-2.0", + "notes": "The package manifest is resolved and inspected; the held pose requires an explicit command and hold/unwind review. The registry records no independent hardware evidence.", + "requirements": {"robot_model": "microduck-standard", "accessories": ["20 cm printable stilts"], "terrain": ["flat"]}, + "publisher_hardware": {"status": "not-claimed", "target": "Microduck with 20 cm printable stilt hardware", "source_url": "https://huggingface.co/HannesVonEssen/microduck-stilts", "note": "The publisher manifest marks this policy simulation-only and requires hardware modifications; no physical MicroDuck deployment evidence is recorded."} + } +} diff --git a/registry/policies/hannesvonessen-microduck-stilts-25cm-policy.json b/registry/policies/hannesvonessen-microduck-stilts-25cm-policy.json new file mode 100644 index 0000000..142e8f8 --- /dev/null +++ b/registry/policies/hannesvonessen-microduck-stilts-25cm-policy.json @@ -0,0 +1,24 @@ +{ + "id": "hannesvonessen-microduck-stilts-25cm-policy", + "source": { + "provider": "huggingface-model", + "repo": "HannesVonEssen/microduck-stilts", + "revision": "8ec310d8f3a254b0f08b9d241f9f6f7bd04ee2ed", + "artifact_path": "25cm/policy.onnx", + "artifact_sha256": "04eb9e3cf42f08fc15500ef08b0c5c8524c75383ae13aeed0a5c85247efeb393", + "manifest_path": "manifest.json", + "manifest_sha256": "f1157f97be6b732092ecfe88119cc8ead14e19c5896c59a026330ee2cb4075a2" + }, + "curation": { + "category": "experimental", + "tags": ["community", "stilts", "25cm", "perpetual", "50hz", "simulation-only", "hardware-mod-required"], + "name": "Stilts Walk 25 cm", + "summary": "Perpetual stilt-walking policy for the 25 cm hardware variant, entered upright on matching stilts; simulation-only per its manifest.", + "details": "Trained on Mjlab-Stilt-Flat-MicroDuck with action_scale 1.0. The manifest requires hardware modifications (printable stilt geometry from Vottivott/microduck-playground hardware/stilts) and a held-pose command review, so there is no generic install route. This entry pins the 25 cm variant artifact; each stilt height is a separately reviewed entry.", + "authors": [{"name": "HannesVonEssen", "url": "https://huggingface.co/HannesVonEssen"}], + "license": "Apache-2.0", + "notes": "The package manifest is resolved and inspected; the held pose requires an explicit command and hold/unwind review. The registry records no independent hardware evidence.", + "requirements": {"robot_model": "microduck-standard", "accessories": ["25 cm printable stilts"], "terrain": ["flat"]}, + "publisher_hardware": {"status": "not-claimed", "target": "Microduck with 25 cm printable stilt hardware", "source_url": "https://huggingface.co/HannesVonEssen/microduck-stilts", "note": "The publisher manifest marks this policy simulation-only and requires hardware modifications; no physical MicroDuck deployment evidence is recorded."} + } +} diff --git a/registry/policies/hannesvonessen-microduck-stilts-50cm-policy.json b/registry/policies/hannesvonessen-microduck-stilts-50cm-policy.json new file mode 100644 index 0000000..5aafd63 --- /dev/null +++ b/registry/policies/hannesvonessen-microduck-stilts-50cm-policy.json @@ -0,0 +1,24 @@ +{ + "id": "hannesvonessen-microduck-stilts-50cm-policy", + "source": { + "provider": "huggingface-model", + "repo": "HannesVonEssen/microduck-stilts", + "revision": "8ec310d8f3a254b0f08b9d241f9f6f7bd04ee2ed", + "artifact_path": "50cm/policy.onnx", + "artifact_sha256": "dc098fd242ff7c447b3a5a7c13acba8eaf72e016d785aab34a964ac2ec4edf5e", + "manifest_path": "manifest.json", + "manifest_sha256": "f1157f97be6b732092ecfe88119cc8ead14e19c5896c59a026330ee2cb4075a2" + }, + "curation": { + "category": "experimental", + "tags": ["community", "stilts", "50cm", "perpetual", "50hz", "simulation-only", "hardware-mod-required"], + "name": "Stilts Walk 50 cm", + "summary": "Perpetual stilt-walking policy for the 50 cm hardware variant, entered upright on matching stilts; simulation-only per its manifest.", + "details": "Trained on Mjlab-Stilt-Flat-MicroDuck with action_scale 1.0. The manifest requires hardware modifications (printable stilt geometry from Vottivott/microduck-playground hardware/stilts) and a held-pose command review, so there is no generic install route. This entry pins the 50 cm variant artifact; each stilt height is a separately reviewed entry.", + "authors": [{"name": "HannesVonEssen", "url": "https://huggingface.co/HannesVonEssen"}], + "license": "Apache-2.0", + "notes": "The package manifest is resolved and inspected; the held pose requires an explicit command and hold/unwind review. The registry records no independent hardware evidence.", + "requirements": {"robot_model": "microduck-standard", "accessories": ["50 cm printable stilts"], "terrain": ["flat"]}, + "publisher_hardware": {"status": "not-claimed", "target": "Microduck with 50 cm printable stilt hardware", "source_url": "https://huggingface.co/HannesVonEssen/microduck-stilts", "note": "The publisher manifest marks this policy simulation-only and requires hardware modifications; no physical MicroDuck deployment evidence is recorded."} + } +} diff --git a/registry/policies/joanfox-microduck-happy-hop.json b/registry/policies/joanfox-microduck-happy-hop.json new file mode 100644 index 0000000..d6a487a --- /dev/null +++ b/registry/policies/joanfox-microduck-happy-hop.json @@ -0,0 +1,28 @@ +{ + "id": "joanfox-microduck-happy-hop", + "source": { + "provider": "huggingface-model", + "repo": "joanfox/microduck-happy-hop", + "revision": "c0447da668255436eea070e862ad8eb89bad2ba1", + "artifact_path": "policy.onnx", + "artifact_sha256": "abd6db1bca2f2a583508cfd9a6fd144a7cce65b302827b9b9a0c5227fc2acae9", + "manifest_path": "manifest.json", + "manifest_sha256": "c3e351d46a0401d437916aa7520127505b50065cc0cd3225fc8408357f345089" + }, + "curation": { + "category": "agility-tricks", + "tags": ["community", "happy-hop", "vertical-hop", "episodic", "50hz"], + "name": "Microduck Happy Hop", + "summary": "Short vertical two-foot hop for Microduck: stabilize in a standing pose, crouch, extend for takeoff, absorb the landing, then return toward HOME.", + "details": "Episodic one-shot policy with a 3.0 s nominal window and zero command block. The publisher contract requires a one-step (20 ms at 50 Hz) action delay, action scale 1.0, pass-through action low-pass, and a stable standing entry (trained from the Backlash walking policy after 1.0 s of exact-zero velocity command; not trained to take off from an active walking stride).", + "authors": [{"name": "joanfox", "url": "https://huggingface.co/joanfox"}], + "license": "Apache-2.0", + "notes": "The package manifest is resolved and inspected; the registry records no independent hardware evidence. Publisher reports a successful physical MicroDuck test by Pollen Robotics on 2026-09-01 with the one-step action delay restored.", + "requirements": {"robot_model": "microduck-standard", "accessories": [], "terrain": ["flat"]}, + "publisher_hardware": {"status": "claimed", "target": "Microduck (BAM XL330, output-side Backlash encoder view)", "source_url": "https://huggingface.co/joanfox/microduck-happy-hop", "note": "Publisher reports the policy ran successfully on a physical MicroDuck after Pollen Robotics restored the required one-step action delay (tested 2026-09-01); validation video is published in the source repository."} + }, + "media": [ + {"type": "video", "url": "https://huggingface.co/joanfox/microduck-happy-hop/resolve/c0447da668255436eea070e862ad8eb89bad2ba1/media/preview.mp4", "label": "Publisher simulation preview of one hop cycle"}, + {"type": "video", "url": "https://huggingface.co/joanfox/microduck-happy-hop/resolve/c0447da668255436eea070e862ad8eb89bad2ba1/media/PXL_20260901_133625139.TS~2.mp4", "label": "Publisher physical-robot validation video"} + ] +} diff --git a/registry/policies/koyogi-hf-microduck-policy-run2.json b/registry/policies/koyogi-hf-microduck-policy-run2.json new file mode 100644 index 0000000..402dff9 --- /dev/null +++ b/registry/policies/koyogi-hf-microduck-policy-run2.json @@ -0,0 +1,23 @@ +{ + "id": "koyogi-hf-microduck-policy-run2", + "source": { + "provider": "huggingface-model", + "repo": "koyogi-hf/microduck-policy-run2", + "revision": "08cacedb1f40b985b8c3ab35b15327cfc1835626", + "artifact_path": "policy.onnx", + "artifact_sha256": "7f31c6929cc4f868ca4f125d613f75179507fc2ca66dd14b4b24ec51b9264b29", + "manifest_path": "manifest.json", + "manifest_sha256": "9f637dd30fb46ac7cdee726cbdc0f2140291da5d9ec48615b88ae37f9bed3feb" + }, + "curation": { + "category": "locomotion", + "tags": ["community", "velocity-walk", "perpetual", "50hz", "simulation-only"], + "name": "Velocity Walk Run2", + "summary": "Self-trained perpetual walking policy on Mjlab-Velocity-Flat-MicroDuck (run1 plus resume, 8749 checkpoint iterations) that runs until told otherwise.", + "details": "Standing-entry policy with an unused zero command block. Upstream metadata declares no license and the manifest omits action_scale, so installation and reuse need maintainer review.", + "authors": [{"name": "koyogi-hf", "url": "https://huggingface.co/koyogi-hf"}], + "notes": "The package manifest is resolved and inspected; action_scale is undeclared and upstream metadata declares no license. The registry records no independent hardware evidence.", + "requirements": {"robot_model": "microduck-standard", "accessories": [], "terrain": ["flat"]}, + "publisher_hardware": {"status": "not-claimed", "target": "Microduck v1 (14 Dynamixel XL330 servos)", "source_url": "https://huggingface.co/koyogi-hf/microduck-policy-run2", "note": "The publisher reports a self-trained walking policy with no physical MicroDuck deployment evidence."} + } +} diff --git a/registry/policies/nupr-haokun-microduck-step-up.json b/registry/policies/nupr-haokun-microduck-step-up.json new file mode 100644 index 0000000..ded4ce4 --- /dev/null +++ b/registry/policies/nupr-haokun-microduck-step-up.json @@ -0,0 +1,24 @@ +{ + "id": "nupr-haokun-microduck-step-up", + "source": { + "provider": "huggingface-model", + "repo": "Nupr-Haokun/microduck-step-up", + "revision": "b98b48650ac443a17cd25eaee472d1844eb2b3e4", + "artifact_path": "policy.onnx", + "artifact_sha256": "7294afa51c7c025ae8b1aabcc117d56bb52a31d73535b8c7a4bfa96a4fa68191", + "manifest_path": "manifest.json", + "manifest_sha256": "aaddc606fb7b3af3ed059afc74cf195224735586e865a9e1e419ed6f759cee1e" + }, + "curation": { + "category": "locomotion", + "tags": ["community", "step-up", "perpetual", "50hz", "simulation-only"], + "name": "Microduck Step-Up", + "summary": "Perpetual walk-slot policy for ascending a 25 mm square-edged household step; simulation-validated and hardware-unvalidated per its manifest.", + "details": "Standing-entry policy trained on Mjlab-StepUpFull-MicroDuck (checkpoint 1000) with an unused zero command block. The publisher notes the policy does not detect the step itself; the richer two-policy step-up plus head-brake recovery package is published separately.", + "authors": [{"name": "Nupr-Haokun", "url": "https://huggingface.co/Nupr-Haokun"}], + "license": "Apache-2.0", + "notes": "The package manifest is resolved and inspected; action_scale is not declared so installation needs review. The registry records no independent hardware evidence.", + "requirements": {"robot_model": "microduck-standard", "accessories": ["25 mm square-edged step"], "terrain": ["flat"]}, + "publisher_hardware": {"status": "not-claimed", "target": "Microduck v1 (14 Dynamixel XL330 servos)", "source_url": "https://huggingface.co/Nupr-Haokun/microduck-step-up", "note": "The publisher manifest describes the policy as simulation-validated and hardware-unvalidated."} + } +} diff --git a/registry/policies/tfrere-microduck-move-flat-out-sprint.json b/registry/policies/tfrere-microduck-move-flat-out-sprint.json new file mode 100644 index 0000000..da59010 --- /dev/null +++ b/registry/policies/tfrere-microduck-move-flat-out-sprint.json @@ -0,0 +1,24 @@ +{ + "id": "tfrere-microduck-move-flat-out-sprint", + "source": { + "provider": "huggingface-model", + "repo": "tfrere/microduck-move-flat-out-sprint", + "revision": "23dc53aec67f667931a5283c34e6715f5fde20a0", + "artifact_path": "policy.onnx", + "artifact_sha256": "6a28c41095286eb117d6e305018f6c9fdcd7a26bdeea4e63ff8d7f3cfb1389dd", + "manifest_path": "manifest.json", + "manifest_sha256": "fbb86a0b92dfad233d37d99718d49288ed73808c789e68b7decf8947aaaa0ff4" + }, + "curation": { + "category": "locomotion", + "tags": ["community", "microduck-academy", "sprint", "perpetual", "50hz", "simulation-only"], + "name": "Flat-Out Sprint", + "summary": "Microduck Academy perpetual walk-slot policy trained to sprint at maximum speed (~0.35 m/s) with fast driving strides while staying balanced.", + "details": "Published with a schema-v2 manifest carrying Academy lineage (prompt, judge_score 1.0, VLM pass). The Academy judge verdict is publisher-provided evidence, not registry verification; model_api, hw_rev, control_hz, servos and action_scale are not declared in the manifest.", + "authors": [{"name": "tfrere", "url": "https://huggingface.co/tfrere"}], + "license": "Apache-2.0", + "notes": "The package manifest is resolved and inspected; several manifest fields are undeclared so installation needs review. The registry records no independent hardware evidence.", + "requirements": {"robot_model": "microduck-standard", "accessories": [], "terrain": ["flat"]}, + "publisher_hardware": {"status": "not-claimed", "target": "Microduck v1 (14 Dynamixel XL330 servos)", "source_url": "https://huggingface.co/tfrere/microduck-move-flat-out-sprint", "note": "The publisher reports simulation judge evaluation only and no physical MicroDuck deployment evidence."} + } +} diff --git a/registry/policies/tfrere-microduck-move-very-low-crouch-walk.json b/registry/policies/tfrere-microduck-move-very-low-crouch-walk.json new file mode 100644 index 0000000..7b4cbfa --- /dev/null +++ b/registry/policies/tfrere-microduck-move-very-low-crouch-walk.json @@ -0,0 +1,24 @@ +{ + "id": "tfrere-microduck-move-very-low-crouch-walk", + "source": { + "provider": "huggingface-model", + "repo": "tfrere/microduck-move-very-low-crouch-walk", + "revision": "a03cc79047ea6e0b5feb4aa068b7b7713c4cb10e", + "artifact_path": "policy.onnx", + "artifact_sha256": "8186135b7ead420869287f5d16c8e1a229516166a9146a29f83c7abc8dc56312", + "manifest_path": "manifest.json", + "manifest_sha256": "248d71d42e662e4c98241235ce3d226d55b184d8e8583090f7e1b99148bd4f0c" + }, + "curation": { + "category": "locomotion", + "tags": ["community", "microduck-academy", "crouch-walk", "perpetual", "50hz", "simulation-only"], + "name": "Very Low Crouch Walk", + "summary": "Microduck Academy perpetual walk-slot policy for steady forward walking with the trunk at about three quarters of standing height and deeply bent knees.", + "details": "Published with a schema-v2 manifest carrying Academy lineage (judge_score 1.0, VLM pass on the crouched posture). The Academy judge verdict is publisher-provided evidence, not registry verification; model_api, hw_rev, control_hz, servos and action_scale are not declared in the manifest.", + "authors": [{"name": "tfrere", "url": "https://huggingface.co/tfrere"}], + "license": "Apache-2.0", + "notes": "The package manifest is resolved and inspected; several manifest fields are undeclared so installation needs review. The registry records no independent hardware evidence.", + "requirements": {"robot_model": "microduck-standard", "accessories": [], "terrain": ["flat"]}, + "publisher_hardware": {"status": "not-claimed", "target": "Microduck v1 (14 Dynamixel XL330 servos)", "source_url": "https://huggingface.co/tfrere/microduck-move-very-low-crouch-walk", "note": "The publisher reports simulation judge evaluation only and no physical MicroDuck deployment evidence."} + } +} diff --git a/registry/policies/zhoumiaosen-microduck-running.json b/registry/policies/zhoumiaosen-microduck-running.json new file mode 100644 index 0000000..d70c611 --- /dev/null +++ b/registry/policies/zhoumiaosen-microduck-running.json @@ -0,0 +1,27 @@ +{ + "id": "zhoumiaosen-microduck-running", + "source": { + "provider": "huggingface-model", + "repo": "zhoumiaosen/microduck-running", + "revision": "49f70558bd8f42f0f05fcdea64f4bec596c9a3a6", + "artifact_path": "policy.onnx", + "artifact_sha256": "0281e6886b487a5df9760521a1c45a210b05113da03f3f3e5c894edc810d361a", + "manifest_path": null, + "manifest_sha256": null + }, + "curation": { + "category": "locomotion", + "tags": ["community", "running", "fast-locomotion", "flat-ground", "simulation-only", "50hz"], + "name": "Microduck Running", + "summary": "PPO locomotion policy for the 14-actuator MicroDuck biped; the publisher reports 1.50 m/s mean body-forward speed in simulation at a 2.0 m/s command and states the sustained 2.0 m/s goal was not met.", + "details": "No machine-readable policy manifest is published with this artifact, so runtime facts remain unknown. The publisher ships the normalized ONNX policy, final training checkpoint, simulation video and raw evaluation JSON, and describes this release as a simulation research checkpoint whose hardware performance has not been evaluated.", + "authors": [{"name": "zhoumiaosen", "url": "https://huggingface.co/zhoumiaosen"}], + "license": "Apache-2.0", + "notes": "No manifest is published; the ONNX interface is inspected only. The registry records no independent hardware evidence.", + "requirements": {"robot_model": "microduck-standard", "accessories": [], "terrain": ["flat"]}, + "publisher_hardware": {"status": "not-claimed", "target": "Microduck v1 (14 Dynamixel XL330 servos)", "source_url": "https://huggingface.co/zhoumiaosen/microduck-running", "note": "The publisher states hardware performance has not been evaluated for this release."} + }, + "media": [ + {"type": "video", "url": "https://huggingface.co/zhoumiaosen/microduck-running/resolve/49f70558bd8f42f0f05fcdea64f4bec596c9a3a6/run.mp4", "label": "Publisher 10-second simulation replay"} + ] +} diff --git a/registry/policies/zhoumiaosen-microduck-straight-running.json b/registry/policies/zhoumiaosen-microduck-straight-running.json new file mode 100644 index 0000000..9802d11 --- /dev/null +++ b/registry/policies/zhoumiaosen-microduck-straight-running.json @@ -0,0 +1,27 @@ +{ + "id": "zhoumiaosen-microduck-straight-running", + "source": { + "provider": "huggingface-model", + "repo": "zhoumiaosen/microduck-straight-running", + "revision": "3132125749ff800720f1047a87d72ea2d9d8d072", + "artifact_path": "policy.onnx", + "artifact_sha256": "fc4fcb5dd8ec7e2a4f5d68f5840f4a9610ee8137a78480d6baa1a15d62095026", + "manifest_path": null, + "manifest_sha256": null + }, + "curation": { + "category": "locomotion", + "tags": ["community", "running", "straight-running", "flat-ground", "simulation-only", "50hz"], + "name": "Microduck Straight Running", + "summary": "PPO running policy with a required heading-hold controller; the publisher reports 1.802 m/s straight progress over 30 seconds and states the 1.9 m/s target was not reached.", + "details": "No machine-readable policy manifest is published with this artifact, so runtime facts remain unknown. The publisher describes the gain over the previous public model as small (+0.38% 30-second straight speed) and below its predeclared useful-improvement threshold, publishing it as a research update with comparison evidence.", + "authors": [{"name": "zhoumiaosen", "url": "https://huggingface.co/zhoumiaosen"}], + "license": "Apache-2.0", + "notes": "No manifest is published; the ONNX interface is inspected only. The registry records no independent hardware evidence.", + "requirements": {"robot_model": "microduck-standard", "accessories": [], "terrain": ["flat"]}, + "publisher_hardware": {"status": "not-claimed", "target": "Microduck v1 (14 Dynamixel XL330 servos)", "source_url": "https://huggingface.co/zhoumiaosen/microduck-straight-running", "note": "The publisher reports held-out simulation tests only and no physical MicroDuck deployment evidence."} + }, + "media": [ + {"type": "video", "url": "https://huggingface.co/zhoumiaosen/microduck-straight-running/resolve/3132125749ff800720f1047a87d72ea2d9d8d072/run.mp4", "label": "Publisher 10-second simulation replay"} + ] +} diff --git a/tests/contributor-tools.test.ts b/tests/contributor-tools.test.ts index 7adbb21..2973047 100644 --- a/tests/contributor-tools.test.ts +++ b/tests/contributor-tools.test.ts @@ -6,7 +6,7 @@ describe("contributor-facing catalog documentation", () => { it("points to the live generated catalog instead of carrying an empty snapshot", () => { const readme = fs.readFileSync(path.resolve("README.md"), "utf8"); const policyCount = fs.readdirSync(path.resolve("registry/policies")).filter((file) => file.endsWith(".json")).length; - expect(policyCount).toBe(18); + expect(policyCount).toBe(35); expect(readme).toContain("https://uduckmoves.com"); expect(readme).toContain("https://uduckmoves.com/registry.json"); expect(readme).toContain("The live catalog is generated from the authored policies"); diff --git a/tests/registry.test.ts b/tests/registry.test.ts index d789d2a..67ae56c 100644 --- a/tests/registry.test.ts +++ b/tests/registry.test.ts @@ -10,7 +10,7 @@ describe("uDuck policy registry integrity", () => { it("validates every authored policy", () => { expect(result.valid, result.errors.join("\n")).toBe(true); expect(result.errors).toHaveLength(0); - expect(result.policies).toHaveLength(18); + expect(result.policies).toHaveLength(35); }); it("requires immutable artifacts and does not retain the dropped recovery entry", () => { diff --git a/tests/schema.test.ts b/tests/schema.test.ts index b7757f7..4931c04 100644 --- a/tests/schema.test.ts +++ b/tests/schema.test.ts @@ -20,7 +20,7 @@ describe("authored policy schema", () => { it("accepts every checked-in policy", () => { const directory = path.resolve("registry/policies"); const files = fs.readdirSync(directory).filter((file) => file.endsWith(".json")).sort(); - expect(files.length).toBe(18); + expect(files.length).toBe(35); for (const file of files) expect(PolicySchema.safeParse(JSON.parse(fs.readFileSync(path.join(directory, file), "utf8"))).success, file).toBe(true); }); From f7b57b6dcc08c29a339dab62ed1812d28bed1a26 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Thu, 17 Sep 2026 00:01:36 -0300 Subject: [PATCH 2/4] test: drop exact policy-count assertions; schema + validity checks cover integrity --- tests/contributor-tools.test.ts | 2 -- tests/registry.test.ts | 1 - tests/schema.test.ts | 1 - 3 files changed, 4 deletions(-) diff --git a/tests/contributor-tools.test.ts b/tests/contributor-tools.test.ts index 2973047..99fbdcc 100644 --- a/tests/contributor-tools.test.ts +++ b/tests/contributor-tools.test.ts @@ -5,8 +5,6 @@ import { describe, expect, it } from "vitest"; describe("contributor-facing catalog documentation", () => { it("points to the live generated catalog instead of carrying an empty snapshot", () => { const readme = fs.readFileSync(path.resolve("README.md"), "utf8"); - const policyCount = fs.readdirSync(path.resolve("registry/policies")).filter((file) => file.endsWith(".json")).length; - expect(policyCount).toBe(35); expect(readme).toContain("https://uduckmoves.com"); expect(readme).toContain("https://uduckmoves.com/registry.json"); expect(readme).toContain("The live catalog is generated from the authored policies"); diff --git a/tests/registry.test.ts b/tests/registry.test.ts index 67ae56c..b28f89b 100644 --- a/tests/registry.test.ts +++ b/tests/registry.test.ts @@ -10,7 +10,6 @@ describe("uDuck policy registry integrity", () => { it("validates every authored policy", () => { expect(result.valid, result.errors.join("\n")).toBe(true); expect(result.errors).toHaveLength(0); - expect(result.policies).toHaveLength(35); }); it("requires immutable artifacts and does not retain the dropped recovery entry", () => { diff --git a/tests/schema.test.ts b/tests/schema.test.ts index 4931c04..0725e80 100644 --- a/tests/schema.test.ts +++ b/tests/schema.test.ts @@ -20,7 +20,6 @@ describe("authored policy schema", () => { it("accepts every checked-in policy", () => { const directory = path.resolve("registry/policies"); const files = fs.readdirSync(directory).filter((file) => file.endsWith(".json")).sort(); - expect(files.length).toBe(35); for (const file of files) expect(PolicySchema.safeParse(JSON.parse(fs.readFileSync(path.join(directory, file), "utf8"))).success, file).toBe(true); }); From bdd919b555b3204f278cb463494e8346ca3c465b Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Thu, 17 Sep 2026 00:14:19 -0300 Subject: [PATCH 3/4] fix: send read tokens to upstream APIs so CI survives anon rate limits --- .github/workflows/ci.yml | 6 ++++ scripts/policy/resolve.py | 28 +++++++++++++++++- tests/test_policy_resolver.py | 56 +++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0d3219a..5c2c0a2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,6 +25,12 @@ jobs: name: Resolve pinned upstream policy artifacts runs-on: ubuntu-24.04 timeout-minutes: 15 + env: + # Anonymous requests from shared runner IPs are rate-limited aggressively + # (HF answers some with 401). A read-only HF_TOKEN secret raises the quota; + # empty means anonymous, as before. GITHUB_TOKEN lifts api.github.com limits. + HF_TOKEN: ${{ secrets.HF_TOKEN }} + GITHUB_TOKEN: ${{ github.token }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with: diff --git a/scripts/policy/resolve.py b/scripts/policy/resolve.py index e311a47..1babee5 100644 --- a/scripts/policy/resolve.py +++ b/scripts/policy/resolve.py @@ -34,6 +34,22 @@ def digest(data: bytes) -> str: return hashlib.sha256(data).hexdigest() +def _token_for_host(hostname: str | None) -> str | None: + """Return a configured read token for one upstream host, else None. + + Anonymous requests from shared CI egress IPs are rate-limited aggressively + (Hugging Face answers some of them with 401). A read-only token raises the + quota; it is only ever attached to its own provider's API host. + """ + + import os + if hostname == "huggingface.co" or (hostname or "").endswith(".huggingface.co"): + return os.environ.get("HF_TOKEN", "").strip() or None + if hostname == "api.github.com": + return os.environ.get("GITHUB_TOKEN", "").strip() or None + return None + + class SafeRedirect(urllib.request.HTTPRedirectHandler): def redirect_request(self, req, fp, code, msg, headers, newurl): parsed = urllib.parse.urlsplit(newurl) @@ -54,7 +70,11 @@ def fetch(url: str, limit: int = 2 * 1024 * 1024) -> bytes: for attempt in range(5): try: opener = urllib.request.build_opener(SafeRedirect()) - request = urllib.request.Request(url, headers={"User-Agent": "uduck-registry"}) + headers = {"User-Agent": "uduck-registry"} + token = _token_for_host(parsed.hostname) + if token is not None: + headers["Authorization"] = f"Bearer {token}" + request = urllib.request.Request(url, headers=headers) with opener.open(request, timeout=120) as response: data = response.read(limit + 1) if len(data) > limit: @@ -62,6 +82,12 @@ def fetch(url: str, limit: int = 2 * 1024 * 1024) -> bytes: return data except urllib.error.HTTPError as exc: last = exc + if exc.code == 401 and _token_for_host(parsed.hostname) is None: + raise ValueError( + f"upstream rejected the request as unauthorized for {url}; " + "configure HF_TOKEN (Hugging Face) or GITHUB_TOKEN (GitHub API) " + "to raise anonymous rate limits" + ) from exc if exc.code not in (429, 502, 503, 504) or attempt == 4: raise retry_after = exc.headers.get("Retry-After", "") diff --git a/tests/test_policy_resolver.py b/tests/test_policy_resolver.py index 5dafc24..cb4fa4d 100644 --- a/tests/test_policy_resolver.py +++ b/tests/test_policy_resolver.py @@ -1,5 +1,6 @@ import copy import json +import os import sys import tempfile import unittest @@ -411,6 +412,61 @@ def open(self_inner, req, timeout=None): resolve_mod.fetch('https://huggingface.co/o/r/resolve/main/manifest.json', limit=10) slept.assert_not_called() + def test_fetch_scopes_read_tokens_per_provider(self): + import urllib.error + import resolve as resolve_mod + seen = {} + def recording_opener(*args, **kwargs): + class Resp: + def read(self_inner, n=-1): return b'ok' + def __enter__(self_inner): return self_inner + def __exit__(self_inner, *a): return False + class Opener: + def open(self_inner, req, timeout=None): + seen[req.full_url] = req.get_header('Authorization') + return Resp() + return Opener() + env = {'HF_TOKEN': 'hf-read-token', 'GITHUB_TOKEN': 'gh-read-token'} + with patch.object(resolve_mod.urllib.request, 'build_opener', recording_opener), patch.dict(os.environ, env): + resolve_mod.fetch('https://huggingface.co/o/r/resolve/main/policy.onnx', limit=10) + resolve_mod.fetch('https://api.github.com/repos/o/r/commits/abc', limit=10) + resolve_mod.fetch('https://raw.githubusercontent.com/o/r/main/policy.onnx', limit=10) + self.assertEqual(seen['https://huggingface.co/o/r/resolve/main/policy.onnx'], 'Bearer hf-read-token') + self.assertEqual(seen['https://api.github.com/repos/o/r/commits/abc'], 'Bearer gh-read-token') + self.assertIsNone(seen['https://raw.githubusercontent.com/o/r/main/policy.onnx']) + + def test_fetch_401_without_token_points_at_token_config(self): + import urllib.error + import resolve as resolve_mod + class FakeHeaders(dict): + def get(self, key, default=''): + return super().get(key, default) + def always_401(*args, **kwargs): + class Opener: + def open(self_inner, req, timeout=None): + raise urllib.error.HTTPError('url', 401, 'Unauthorized', FakeHeaders(), None) + return Opener() + with patch.object(resolve_mod.urllib.request, 'build_opener', always_401), patch('time.sleep', return_value=None) as slept, patch.dict(os.environ, {'HF_TOKEN': '', 'GITHUB_TOKEN': ''}): + with self.assertRaisesRegex(ValueError, 'HF_TOKEN'): + resolve_mod.fetch('https://huggingface.co/o/r/resolve/main/manifest.json', limit=10) + slept.assert_not_called() + + def test_fetch_401_with_token_fails_fast(self): + import urllib.error + import resolve as resolve_mod + class FakeHeaders(dict): + def get(self, key, default=''): + return super().get(key, default) + def always_401(*args, **kwargs): + class Opener: + def open(self_inner, req, timeout=None): + raise urllib.error.HTTPError('url', 401, 'Unauthorized', FakeHeaders(), None) + return Opener() + with patch.object(resolve_mod.urllib.request, 'build_opener', always_401), patch('time.sleep', return_value=None) as slept, patch.dict(os.environ, {'HF_TOKEN': 'hf-read-token'}): + with self.assertRaises(urllib.error.HTTPError): + resolve_mod.fetch('https://huggingface.co/o/r/resolve/main/manifest.json', limit=10) + slept.assert_not_called() + if __name__ == '__main__': unittest.main() From 6c88de21fb541669d0e4d0e77122697939020261 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Thu, 17 Sep 2026 01:28:06 -0300 Subject: [PATCH 4/4] sweep: drop 2 tfrere academy entries, upstream went private mid-sweep --- ...tfrere-microduck-move-flat-out-sprint.json | 24 ------------------- ...e-microduck-move-very-low-crouch-walk.json | 24 ------------------- 2 files changed, 48 deletions(-) delete mode 100644 registry/policies/tfrere-microduck-move-flat-out-sprint.json delete mode 100644 registry/policies/tfrere-microduck-move-very-low-crouch-walk.json diff --git a/registry/policies/tfrere-microduck-move-flat-out-sprint.json b/registry/policies/tfrere-microduck-move-flat-out-sprint.json deleted file mode 100644 index da59010..0000000 --- a/registry/policies/tfrere-microduck-move-flat-out-sprint.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": "tfrere-microduck-move-flat-out-sprint", - "source": { - "provider": "huggingface-model", - "repo": "tfrere/microduck-move-flat-out-sprint", - "revision": "23dc53aec67f667931a5283c34e6715f5fde20a0", - "artifact_path": "policy.onnx", - "artifact_sha256": "6a28c41095286eb117d6e305018f6c9fdcd7a26bdeea4e63ff8d7f3cfb1389dd", - "manifest_path": "manifest.json", - "manifest_sha256": "fbb86a0b92dfad233d37d99718d49288ed73808c789e68b7decf8947aaaa0ff4" - }, - "curation": { - "category": "locomotion", - "tags": ["community", "microduck-academy", "sprint", "perpetual", "50hz", "simulation-only"], - "name": "Flat-Out Sprint", - "summary": "Microduck Academy perpetual walk-slot policy trained to sprint at maximum speed (~0.35 m/s) with fast driving strides while staying balanced.", - "details": "Published with a schema-v2 manifest carrying Academy lineage (prompt, judge_score 1.0, VLM pass). The Academy judge verdict is publisher-provided evidence, not registry verification; model_api, hw_rev, control_hz, servos and action_scale are not declared in the manifest.", - "authors": [{"name": "tfrere", "url": "https://huggingface.co/tfrere"}], - "license": "Apache-2.0", - "notes": "The package manifest is resolved and inspected; several manifest fields are undeclared so installation needs review. The registry records no independent hardware evidence.", - "requirements": {"robot_model": "microduck-standard", "accessories": [], "terrain": ["flat"]}, - "publisher_hardware": {"status": "not-claimed", "target": "Microduck v1 (14 Dynamixel XL330 servos)", "source_url": "https://huggingface.co/tfrere/microduck-move-flat-out-sprint", "note": "The publisher reports simulation judge evaluation only and no physical MicroDuck deployment evidence."} - } -} diff --git a/registry/policies/tfrere-microduck-move-very-low-crouch-walk.json b/registry/policies/tfrere-microduck-move-very-low-crouch-walk.json deleted file mode 100644 index 7b4cbfa..0000000 --- a/registry/policies/tfrere-microduck-move-very-low-crouch-walk.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": "tfrere-microduck-move-very-low-crouch-walk", - "source": { - "provider": "huggingface-model", - "repo": "tfrere/microduck-move-very-low-crouch-walk", - "revision": "a03cc79047ea6e0b5feb4aa068b7b7713c4cb10e", - "artifact_path": "policy.onnx", - "artifact_sha256": "8186135b7ead420869287f5d16c8e1a229516166a9146a29f83c7abc8dc56312", - "manifest_path": "manifest.json", - "manifest_sha256": "248d71d42e662e4c98241235ce3d226d55b184d8e8583090f7e1b99148bd4f0c" - }, - "curation": { - "category": "locomotion", - "tags": ["community", "microduck-academy", "crouch-walk", "perpetual", "50hz", "simulation-only"], - "name": "Very Low Crouch Walk", - "summary": "Microduck Academy perpetual walk-slot policy for steady forward walking with the trunk at about three quarters of standing height and deeply bent knees.", - "details": "Published with a schema-v2 manifest carrying Academy lineage (judge_score 1.0, VLM pass on the crouched posture). The Academy judge verdict is publisher-provided evidence, not registry verification; model_api, hw_rev, control_hz, servos and action_scale are not declared in the manifest.", - "authors": [{"name": "tfrere", "url": "https://huggingface.co/tfrere"}], - "license": "Apache-2.0", - "notes": "The package manifest is resolved and inspected; several manifest fields are undeclared so installation needs review. The registry records no independent hardware evidence.", - "requirements": {"robot_model": "microduck-standard", "accessories": [], "terrain": ["flat"]}, - "publisher_hardware": {"status": "not-claimed", "target": "Microduck v1 (14 Dynamixel XL330 servos)", "source_url": "https://huggingface.co/tfrere/microduck-move-very-low-crouch-walk", "note": "The publisher reports simulation judge evaluation only and no physical MicroDuck deployment evidence."} - } -}