a couple more features for version 18

This commit is contained in:
Jacob Dubin
2026-04-26 20:19:16 -05:00
parent df78170aa2
commit acbba413db
9 changed files with 586 additions and 24 deletions

View File

@@ -91,6 +91,8 @@ The following behavior is present in source and covered by focused tests:
- apostrophes are no longer escaped to `&apos;` in spoken ESML, while `&`, `<`, `>`, and `"` remain escaped
- radio voice launch supports `open the radio` and genre launch such as `play country music`, using local `@be/radio` `menu` payloads, `SKILL_REDIRECT`, and silent completion
- news has a first Nimbus-shaped cloud path using `match.cloudSkill = news` and a `news` `SKILL_ACTION` with synthetic briefing content
- stop commands such as `stop that` and `never mind` emit stock `global_commands` `stop` NLU plus a local `@be/idle` redirect, without generic chat speech
- volume commands emit stock `global_commands` volume intents: `volumeUp`, `volumeDown`, and `volumeToValue` with `volumeLevel`; `show volume controls` redirects to `@be/settings` `volumeQuery`
- stock-shaped clock handoffs cover time, date, day, clock open, timer/alarm menu, timer/alarm value, timer/alarm clarification, and timer/alarm delete
- alarm parsing covers forms such as `7:30 am`, `830`, `8 30`, `7, 44`, `10-25`, `10:25 pm`, and `10 25 p m`
- ambiguous alarm times can prefer the next local occurrence when the robot context includes `runtime.location.iso`
@@ -147,6 +149,7 @@ Before calling `1.0.18` complete, prove or explicitly defer these:
- Regression test photo/gallery flows again after the `jibo test 24` fixes: open gallery, answer the stock `shared/yes_no` prompt with a transcript-bearing `yes`, hand into create, take one photo, keep it, and avoid blue-ring or `I heard you` stale turns.
- Live-test radio launch: `open the radio` passed in `jibo test 22`; re-run `play country music` if that exact phrase was not captured.
- Treat basic news as live-proven by `jibo test 23`; defer provider-backed or category-expanded news unless it is chosen as an optional feature slice.
- Regression test the added stop and volume slices: `stop that`, `never mind`, `turn it up`, `turn it down`, `set volume to six`, and `show volume controls`.
- Recheck constrained yes/no prompts for update/backup/share/gallery/alarm replacement without leaking global rules.
- Recheck that stock OS no longer logs OpenJibo-only websocket events such as synthetic pending/context/ack packets from the current build.
- Recheck backup/update behavior with explicit attention to robot-local `jibo.scheduler.backupStatus`, CPU/load, and whether the deployed cloud is involved at all.
@@ -164,13 +167,13 @@ These are not blockers for calling `1.0.18` complete unless the live test shows
- news content is synthetic; `jibo test 23` proved the path but not live provider-backed headlines
- gallery `shared/yes_no` still needs a successful transcript-bearing live `yes` pass
- weather, calendar, commute, personal report, identity, memory, and proactivity are still mostly discovery or placeholder content paths
- volume, stop, robot age, and command-versus-question personality routing are not implemented yet
- stop and volume are implemented but still need live stock-OS proof; robot age and command-versus-question personality routing are not implemented yet
## `1.0.19` Direction
After `1.0.18` is tested and tagged, `1.0.19` should move back into feature work:
- one lightweight device-control feature, most likely stop or volume
- harden whichever stop/volume behavior is not fully proven by the `1.0.18` live pass, or pick the next lightweight device/persona slice
- end-to-end update/backup/restore proof
- STT reliability improvements, including noise screening and a managed STT comparison
- provider-backed first content path, likely news or weather

View File

@@ -147,17 +147,26 @@ Current release theme:
### 5. Optional Small Feature Before `1.0.18` Freeze
- Status: `ready`
- Status: `implemented`
- Tags: `protocol`
- Why now: the user wants one or two features before `1.0.18` is called complete, but the release should not take on a risky subsystem.
- Preferred candidates:
- Selected slices:
- Stop command
- Volume up / volume down voice control
- How old are you / robot age persona
- Guidance:
- pick only one if the live regression pass finds bugs
- pick at most two if the current bug-fix paths stay stable
- keep the implementation source-backed and easy to revert or defer
- Volume up / volume down / set-to-value voice control
- Current code:
- `stop`, `stop that`, and `never mind` map to stock `global_commands` `stop` NLU plus local `@be/idle` redirect/completion
- `turn it up` and `turn it down` emit stock `global_commands` `volumeUp` / `volumeDown` with `volumeLevel = null` and no cloud speech
- `set volume to six` emits stock `global_commands` `volumeToValue` with `volumeLevel = 6` and no cloud speech
- `show volume controls` redirects into `@be/settings` with `volumeQuery`
- Evidence:
- Pegasus `globals/global_commands_launch.rule` defines `stop`, `volumeUp`, `volumeDown`, and `volumeToValue`
- stock Jibo `VolumePlugin` subscribes to global volume events and uses the same intent/entity names
- stock `@be/settings` exposes `volumeQuery` and opens the volume panel
- Exit criteria:
- live stop settles the robot without a generic chat reply
- live volume up/down audibly changes volume or logs a local volume event
- live volume-to-value changes the setting to the requested value or logs the expected stock local handling
- live volume controls opens the settings volume panel
## Implemented In Current Source
@@ -248,6 +257,19 @@ Current release theme:
- Follow-up:
- keep this in regression coverage because it shares turn-state machinery with gallery and alarm flows
### Stop And Volume First Pass
- Status: `implemented`
- Tags: `protocol`
- Result:
- global stop commands emit stock `global_commands` `stop` and redirect to `@be/idle`
- relative volume commands emit stock `global_commands` `volumeUp` / `volumeDown`
- absolute volume commands emit `volumeToValue` with a `volumeLevel` entity
- volume controls launch redirects to `@be/settings` `volumeQuery`
- websocket responses avoid generic chat speech for these local/global command paths
- Follow-up:
- live validation remains in the immediate queue because volume depends on stock robot local global-command handling
### Unknown OpenJibo Event Noise
- Status: `implemented`
@@ -272,7 +294,7 @@ Current release theme:
### 6. Stop Command
- Status: `ready`
- Status: `polish`
- Tags: `protocol`
- User goals:
- `stop`
@@ -280,15 +302,15 @@ Current release theme:
- `never mind`
- Evidence:
- `@be/idle` exists and is already used as a cleanup redirect target
- current `1.0.18` source emits stock `global_commands` `stop` plus local `@be/idle` redirect
- Questions:
- whether stock source has a dedicated stop/cancel intent beyond idle redirect
- whether stop should interrupt active local skills or only cloud speech paths in the first pass
- whether live stock OS treats the combined global stop plus idle redirect as cleanly as expected during active local skills
- Exit criteria:
- a spoken stop command settles the robot locally without a generic chat reply
### 7. Volume Up / Volume Down Voice Control
- Status: `ready`
- Status: `polish`
- Tags: `protocol`
- User goals:
- `turn it up`
@@ -296,10 +318,11 @@ Current release theme:
- `increase the volume`
- `decrease the volume`
- Evidence:
- stock Jibo exposes volume control through robot UX, so there should be a local control or settings path to mirror
- Pegasus global commands define `volumeUp`, `volumeDown`, and `volumeToValue`
- stock Jibo `VolumePlugin` listens for those global intents and `volumeLevel`
- current `1.0.18` source emits those stock NLU shapes and opens `@be/settings` `volumeQuery`
- Questions:
- exact local payload shape for relative volume changes
- whether first pass should support absolute values such as `set volume to 5`
- whether live stock OS applies the global volume event from the hosted cloud response without any additional local event payload
- Exit criteria:
- relative voice volume commands adjust volume without generic cloud speech
@@ -505,13 +528,13 @@ Before closing `1.0.18`:
2. Basic news regression, with provider-backed expansion deferred
3. Backup / OTA / share yes-no regression
4. Alarm and photo/gallery regression
5. Optional small feature only if the regression pass stays calm
5. Stop and volume first-pass validation
Use [regression-test-plan.md](regression-test-plan.md) as the detailed checklist for this sequence.
For `1.0.19`:
1. Stop command or volume control
1. Harden stop or volume if the `1.0.18` live pass exposes stock-OS quirks; otherwise pick robot age/persona or another lightweight slice
2. Update, backup, and restore proof
3. STT upgrade and noise screening
4. Hosted capture/storage plan

View File

@@ -168,6 +168,34 @@ Expected:
- no `ffmpeg` failure should become the dominant failure mode for non-Opus buffered audio
- short replies such as `yes`, `no`, `cancel`, and short alarm times should either map correctly or be classified as STT misses with evidence
### Stop And Volume
Goal: prove the added lightweight device-control slice before closing `1.0.18`.
Test these phrases:
- `stop`
- `stop that`
- `never mind`
- `turn it up`
- `turn it down`
- `set volume to six`
- `show volume controls`
Expected:
- stop commands settle the robot locally without generic chat speech
- `turn it up` and `turn it down` adjust volume or at least produce the stock local volume event/log
- `set volume to six` sets or attempts to set the local volume level to `6`
- `show volume controls` opens the settings volume panel
Capture check:
- stop emits `nlu.intent = stop`, `nlu.domain = global_commands`, then redirects to `@be/idle`
- relative volume emits `nlu.intent = volumeUp` or `volumeDown`, `nlu.domain = global_commands`, and `entities.volumeLevel = null`, with no `SKILL_ACTION` cloud speech
- absolute volume emits `nlu.intent = volumeToValue` and `entities.volumeLevel` matching the requested value, with no `SKILL_ACTION` cloud speech
- volume controls redirects to `@be/settings` with `nlu.intent = volumeQuery`
## Optional Feature Slice Checks
When a new feature is added before a release closes:
@@ -178,8 +206,6 @@ When a new feature is added before a release closes:
For the current candidate list, add cases here when implemented:
- stop command: `stop`, `stop that`, `never mind`
- volume: `turn it up`, `turn it down`, `increase the volume`, `decrease the volume`
- robot age/persona: `how old are you`
## After The Run