Repository navigation
feat(configAPI): Robot kind, with ghost robots for demos - #185
Conversation
Adds a `Robot` configuration kind that declares a robot by id with its identity fields (label, tags). A real robot can be pre-registered before its agent connects; ingest owns everything else from then on. With `ghost: true` the robot is a static demo placeholder: it is marked with the existing ghost sentinel (updateStamp / ts = 12, which the UI treats as never stale), reads as online, and the spec may carry a pose, datasource values and statuses, written once into attr_values, robot_key_values, robot_status and localization. Those fields are rejected on non-ghost robots, so the kind cannot be used to feed live data. Clearing a ghost removes all of it; clearing a real robot is refused while it is online. `tags` is a new optional field on the robot schema; nothing consumes it yet. The new test suite resets the DB after itself, since isoMqttConfig.test asserts an absolute robot count. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
There was a problem hiding this comment.
Claude Code Review
Claude Code Review is paused for this repository because its GitHub organization is not linked to your Claude organization.
To turn it back on, one person needs both roles: owner of the GitHub organization (or the account owner, for a personal repository) and admin or owner of your Claude organization. If that is not you, pass this on to someone who is.
Open Organization settings, Git providers and click Link next to the GitHub organization's name. If it is not listed, click Enable GitHub integration or Connect your GitHub first, whichever the page shows.
New pull requests are then reviewed as before. To get a review on one that is already open, someone with write access can comment @claude review.
Tip: disable this comment in your organization's Code Review settings.
✅ Deploy Preview for ornate-croquembouche-cc5482 canceled.
|
Nothing in ORO consumes a tags field yet, so the kind declares only label (plus the ghost fields). No robot schema change. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Summary
Robotconfiguration kind (POST /api/configuration/apply): declares a robot by id with alabel. Pre-registers a real robot offline before its agent connects; re-apply touches only the name, ingest owns the rest.ghost: truemakes a static demo placeholder: online, marked with the existing ghost sentinel (updateStamp/ts=HACK_GHOST_UPDATE_STAMP_VALUE), with optionalpose,attributesandstatuseswritten once intoattr_values,robot_key_values,robot_statusandlocalization. Those three fields are aSchemaErrorwithoutghost: true, so this is not a live-data path.clearremoves a ghost and its derived documents; removes an offline real robot; refuses an online one.listflags ghosts.docs/ghost-robots.md, row inREADME-dev.md.Motivation: demo instances with one or two real robots need a fleet to show. Used first on the Brickmart instance (ghosts
picker-3..picker-8in that config repo).Test plan
app: newconfigAPI:Robot kindsuite, 12 tests (auth, create, re-apply, schema rejections, ghost writes, clear, re-apply after clear, list)app: full suite greenstatuseskeysNote: new suite adds
after(resetDatabase);isoMqttConfig.testasserts an absolute robot count and failed when run after a suite that left robots behind.🤖 Generated with Claude Code