openvibers/openvibe.contracts Commits
A device command may carry turn_epoch: the robot's control epoch, so a device can refuse a command older than the newest turn halt (0.213.0) (#210)
Changes
@@@ -32,6 +32,11 @@ the notes were in the tag and commit messages (`git tag -n1`).- Chat's line is now "Chat with Vibe, friends and groups": Vibe, OpenVibe's assistant, lives at openvibe.chat/vibe(OpenVibe.Chat#139).- Service ids, domains, capabilities and events are unchanged: only what people read.++- **`turn_epoch` on a device command** (`bot.device-message@1`, additive). This was the community LOOI driver's++ reviewers' question A2. It carries the robot's control epoch when Bot decided the command: it rises when a queue turn++ ends, is left or is paused by an owner takeover (OpenVibe.Bot#155), and Bot's halt for that change carries the new++ value. A device or plugin may refuse a command older than the newest halt's epoch. It is milliseconds on Bot's++ clock, so it keeps rising across Bot restarts. Older devices ignore it (Node's decoder skips unknown fields).## 0.212.0 — 2026-10-24@@@ -204,6 +204,11 @@}}},++ "turn_epoch": {++ "type": "integer",++ "minimum": 0,++ "description": "The robot's control epoch when Bot decided this command (Bot#155): it rises each time a queue turn ends, is left or is paused by an owner takeover, and Bot's own halt for that change carries the new value. A device or plugin may refuse a command whose turn_epoch is lower than the newest halt's, defence in depth on top of Bot's own guarantee that nothing decided under a turn is sent after that turn's halt. Milliseconds on Bot's clock, so it keeps rising across Bot restarts. Absent from Bots before 0.213.0 and on robots without a turn queue."++ },"robot_id": {"type": "string","pattern": "^rob_[0-9A-HJKMNP-TV-Z]{26}$"@@@ -71772,6 +71772,11 @@}}},++ "turn_epoch": {++ "type": "integer",++ "minimum": 0,++ "description": "The robot's control epoch when Bot decided this command (Bot#155): it rises each time a queue turn ends, is left or is paused by an owner takeover, and Bot's own halt for that change carries the new value. A device or plugin may refuse a command whose turn_epoch is lower than the newest halt's, defence in depth on top of Bot's own guarantee that nothing decided under a turn is sent after that turn's halt. Milliseconds on Bot's clock, so it keeps rising across Bot restarts. Absent from Bots before 0.213.0 and on robots without a turn queue."++ },"robot_id": {"type": "string","pattern": "^rob_[0-9A-HJKMNP-TV-Z]{26}$"@@@ -196857,6 +196857,10 @@ export type BotDeviceMessage =subject?: string | null;role: string;};++ /**++ * The robot's control epoch when Bot decided this command (Bot#155): it rises each time a queue turn ends, is left or is paused by an owner takeover, and Bot's own halt for that change carries the new value. A device or plugin may refuse a command whose turn_epoch is lower than the newest halt's, defence in depth on top of Bot's own guarantee that nothing decided under a turn is sent after that turn's halt. Milliseconds on Bot's clock, so it keeps rising across Bot restarts. Absent from Bots before 0.213.0 and on robots without a turn queue.++ */++ turn_epoch?: number;robot_id?: string;/*** OpenVibe.Node only: the driver to send it to.
@@ -32,6 +32,11 @@ the notes were in the tag and commit messages (`git tag -n1`).
@@ -32,6 +32,11 @@ the notes were in the tag and commit messages (`git tag -n1`).
- Chat's line is now "Chat with Vibe, friends and groups": Vibe, OpenVibe's assistant, lives at openvibe.chat/vibe
- Chat's line is now "Chat with Vibe, friends and groups": Vibe, OpenVibe's assistant, lives at openvibe.chat/vibe
(OpenVibe.Chat#139).
(OpenVibe.Chat#139).
- Service ids, domains, capabilities and events are unchanged: only what people read.
- Service ids, domains, capabilities and events are unchanged: only what people read.
+- **`turn_epoch` on a device command** (`bot.device-message@1`, additive). This was the community LOOI driver's
+ reviewers' question A2. It carries the robot's control epoch when Bot decided the command: it rises when a queue turn
+ ends, is left or is paused by an owner takeover (OpenVibe.Bot#155), and Bot's halt for that change carries the new
+ value. A device or plugin may refuse a command older than the newest halt's epoch. It is milliseconds on Bot's
+ clock, so it keeps rising across Bot restarts. Older devices ignore it (Node's decoder skips unknown fields).
## 0.212.0 — 2026-10-24
## 0.212.0 — 2026-10-24
@@ -204,6 +204,11 @@
@@ -204,6 +204,11 @@
}
}
}
}
},
},
+ "turn_epoch": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "The robot's control epoch when Bot decided this command (Bot#155): it rises each time a queue turn ends, is left or is paused by an owner takeover, and Bot's own halt for that change carries the new value. A device or plugin may refuse a command whose turn_epoch is lower than the newest halt's, defence in depth on top of Bot's own guarantee that nothing decided under a turn is sent after that turn's halt. Milliseconds on Bot's clock, so it keeps rising across Bot restarts. Absent from Bots before 0.213.0 and on robots without a turn queue."
+ },
"robot_id": {
"robot_id": {
"type": "string",
"type": "string",
"pattern": "^rob_[0-9A-HJKMNP-TV-Z]{26}$"
"pattern": "^rob_[0-9A-HJKMNP-TV-Z]{26}$"
@@ -71772,6 +71772,11 @@
@@ -71772,6 +71772,11 @@
}
}
}
}
},
},
+ "turn_epoch": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "The robot's control epoch when Bot decided this command (Bot#155): it rises each time a queue turn ends, is left or is paused by an owner takeover, and Bot's own halt for that change carries the new value. A device or plugin may refuse a command whose turn_epoch is lower than the newest halt's, defence in depth on top of Bot's own guarantee that nothing decided under a turn is sent after that turn's halt. Milliseconds on Bot's clock, so it keeps rising across Bot restarts. Absent from Bots before 0.213.0 and on robots without a turn queue."
+ },
"robot_id": {
"robot_id": {
"type": "string",
"type": "string",
"pattern": "^rob_[0-9A-HJKMNP-TV-Z]{26}$"
"pattern": "^rob_[0-9A-HJKMNP-TV-Z]{26}$"
@@ -196857,6 +196857,10 @@ export type BotDeviceMessage =
@@ -196857,6 +196857,10 @@ export type BotDeviceMessage =
subject?: string | null;
subject?: string | null;
role: string;
role: string;
};
};
+ /**
+ * The robot's control epoch when Bot decided this command (Bot#155): it rises each time a queue turn ends, is left or is paused by an owner takeover, and Bot's own halt for that change carries the new value. A device or plugin may refuse a command whose turn_epoch is lower than the newest halt's, defence in depth on top of Bot's own guarantee that nothing decided under a turn is sent after that turn's halt. Milliseconds on Bot's clock, so it keeps rising across Bot restarts. Absent from Bots before 0.213.0 and on robots without a turn queue.
+ */
+ turn_epoch?: number;
robot_id?: string;
robot_id?: string;
/**
/**
* OpenVibe.Node only: the driver to send it to.
* OpenVibe.Node only: the driver to send it to.