2026-04-20 07:47:32 -05:00
# Feature Backlog
## Purpose
2026-04-25 23:06:49 -05:00
This backlog turns discovery into implementation slices for the hosted `.NET` cloud.
2026-04-20 07:47:32 -05:00
2026-04-25 23:06:49 -05:00
Use it as the working queue when picking the next feature or bug-fix slice. The release pattern is: implement a narrow slice, test it on stock OS `1.9` , update this file with what happened, then either close the release or roll the next larger idea forward.
2026-04-20 07:47:32 -05:00
2026-04-26 20:03:30 -05:00
The live regression checklist for release closeout is [regression-test-plan.md ](regression-test-plan.md ).
2026-04-20 07:47:32 -05:00
Status key:
2026-04-25 23:06:49 -05:00
- `implemented` : present in current source and covered by focused tests
- `polish` : implemented enough to test, but still needs live proof or small cleanup
2026-04-20 07:47:32 -05:00
- `ready` : grounded enough to implement now
2026-04-25 23:06:49 -05:00
- `discovery` : more Pegasus, JiboOS, capture, or log work needed first
- `blocked` : waiting on infrastructure, provider choice, or a risky unknown
Tags:
- `protocol` : websocket, HTTP, or stock payload shape
- `content` : provider data or response content
- `docs` : operator docs, runbooks, or capture process
- `stt` : transcript reliability
- `storage` : persistence, media, backups, or hosted export
## Current `1.0.18` Snapshot
Current cloud version: `1.0.18`
Runtime truth:
- hosted `.NET` projects and cloud tests target `net10.0`
- version source of truth is [OpenJiboCloudBuildInfo.cs ](../src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/OpenJiboCloudBuildInfo.cs )
- `/health` , startup logging, and spoken `cloud version` are aligned with that constant
2026-04-29 09:00:04 -05:00
- spoken `cloud version` is now a one-shot diagnostic with speech-tail protection instead of a follow-up chat turn
2026-04-20 07:47:32 -05:00
2026-04-25 23:06:49 -05:00
Current release theme:
2026-04-20 07:47:32 -05:00
2026-04-25 23:06:49 -05:00
- alarm and photo/gallery quirks have received the main bug-fix attention
- Word of the Day cleanup, constrained yes/no routing, unknown websocket event suppression, and local state persistence are already in the current code
2026-04-26 08:32:19 -05:00
- radio, ESML apostrophe cleanup, and first news are implemented in source/tests; radio and basic news are live-proven as of `jibo test 23`
2026-04-26 07:37:31 -05:00
- `jibo test 22` validated radio, exposed backup/load interference, exposed a shared yes/no no-input gap, exposed repeated create keeper prompts after photo handoff, and showed local whisper `ffmpeg` failures on unusable buffered audio
2026-04-26 08:32:19 -05:00
- `jibo test 23` validated basic news, proved one alarm set/fire path at `7:43 AM` , exposed comma-separated/short alarm follow-up parsing risk, showed stock alarm replacement yes/no rules that needed cloud handling, and showed photo gallery still failing when `shared/yes_no` ASR came back empty
2026-04-26 11:20:00 -05:00
- `jibo test 24` showed alarm replacement yes/no working, but exposed empty `clock/alarm_set_value` and `gallery/gallery_preview` turns falling into generic `I heard you` fallback speech; it also showed `CLIENT_NLU cancel` inside `clock/alarm_set_value` re-asking for an alarm value instead of closing the prompt
2026-04-27 22:13:59 -05:00
- `jibo test 25` proved a broader regression path but exposed repeated backup-in-progress/update-menu blockage, timer/alarm stale state and delete/menu disagreement, gallery `shared/yes_no` hangs under `@be/gallery` , punctuated `Never mind.` falling through to chat, volume homophone parsing (`Set Volume 2-6.` ), and settings volume-control cleanup falling into `I heard you`
2026-04-28 08:01:35 -05:00
- `jibo test 26` live-proved punctuated stop, volume homophone parsing, gallery launch/yes/create/save, and good morning; it still exposed robot-local backup warnings, long blue-ring buffering without a fresh `LISTEN` , alarm replacement drifting into the value/manual screen, and alarm delete phrases/mishears falling to chat
2026-04-29 09:00:04 -05:00
- `jibo test 27` isolated early confusion: local `jibo-server-service` restarted and raised `Q4-Server_connection_lost` before testing; cloud version then self-listened into `Cloudford.` because the previous diagnostic path stayed follow-up eligible; the backup warning again came from local `@be/surprises-ota` with no `Backup_*` HTTP calls
2026-04-29 09:48:36 -05:00
- `jibo test 28` isolated the follow-on backup doorway: cloud-version/generic Nimbus matches had `skipSurprises` unset, then stock BE requested `@be/surprises` after Nimbus settled; VAD inhibited the offer in Test 28, while Test 27 selected `@be/surprises-ota` through the same local lifecycle path
2026-04-30 00:21:33 -05:00
- `jibo test 29` confirmed `skipSurprises = true` was reaching stock BE and no backup announcement repeated in the focused run, but the cloud-version answer still interrupted because the spoken diagnostic included `Jibo` and triggered local hotphrase barge-in during Nimbus TTS
2026-04-30 07:37:14 -05:00
- `jibo test 30` confirmed cloud-version now speaks cleanly; it still exposed a local gallery-to-`@be/surprises-ota` backup announcement, missing visible empty-gallery voice listen, and a duplicate alarm clock relaunch after `638` was parsed locally as `6:38 PM`
2026-04-20 07:47:32 -05:00
2026-04-25 23:06:49 -05:00
## Immediate `1.0.18` Queue
2026-04-20 07:47:32 -05:00
### 1. Radio Resume And Genre Launch
2026-04-25 23:06:49 -05:00
- Status: `polish`
2026-04-20 07:47:32 -05:00
- Tags: `protocol`
2026-04-25 23:06:49 -05:00
- Why now: the code path is implemented and test-backed, and it is a low-risk local-skill expansion after Word of the Day.
- Current code:
- `open the radio` maps to `@be/radio` with `intent = menu`
- `play country music` maps to `@be/radio` with `entities.station = Country`
- websocket output includes `LISTEN` , `EOS` , local `SKILL_REDIRECT` , and silent completion
- Evidence:
- JiboOS `@be/radio` treats `menu` as a play launch and reads `result.nlu.entities.station`
- `Country` is a supported station key in the inspected genre metadata
2026-04-26 07:37:31 -05:00
- `jibo test 22` radio live validation passed
2026-04-20 07:47:32 -05:00
- Exit criteria:
2026-04-25 23:06:49 -05:00
- live `open the radio` resumes or opens radio without generic chat speech
- live `play country music` opens a country station
- no new stock-OS unknown-event noise appears in the radio launch path
- Next action:
- run this in the `1.0.18` live regression pass and capture both websocket payloads and robot logs
2026-04-20 07:47:32 -05:00
2026-04-25 23:06:49 -05:00
### 2. News Through Nimbus
2026-04-20 07:47:32 -05:00
2026-04-26 08:32:19 -05:00
- Status: `implemented`
2026-04-25 23:06:49 -05:00
- Tags: `protocol` , `content`
2026-04-26 08:32:19 -05:00
- Why now: the first Nimbus-compatible cloud path is implemented, test-backed, and live-proven; content can stay synthetic for `1.0.18` .
2026-04-25 23:06:49 -05:00
- Current code:
- `tell me the news` maps to `IntentName = news`
- outbound listen match includes `cloudSkill = news`
- `SKILL_ACTION` uses skill id `news` and `mim_id = runtime-news`
- Evidence:
- JiboOS Nimbus checks `match.cloudSkill === "news"` and waits for a cloud response
2026-04-26 07:37:31 -05:00
- `jibo test 22` captured the phrase `So, play the news.` reaching the `news` intent, but live behavior was not cleanly confirmed
2026-04-26 08:32:19 -05:00
- `jibo test 23` successfully played the synthetic quick brief
2026-04-26 11:20:00 -05:00
- original Pegasus `report-skill` news tests cover the next expansion shape: category preferences, default categories, duplicate filtering, missing-summary filtering, child/unidentified-speaker content filtering, and headline image metadata
2026-04-20 07:47:32 -05:00
- Exit criteria:
2026-04-26 08:32:19 -05:00
- live `tell me the news` reaches the Nimbus-shaped path
2026-04-25 23:06:49 -05:00
- the robot behavior feels like a cloud skill response, not generic chat playback
- Next action:
2026-04-26 08:32:19 -05:00
- keep the basic path in regression; provider-backed or category-expanded headlines can wait for `1.0.19` unless chosen as the optional feature slice
2026-04-20 07:47:32 -05:00
2026-04-25 23:06:49 -05:00
### 3. Backup / OTA / Share Yes-No Reliability
2026-04-20 07:47:32 -05:00
2026-04-25 23:06:49 -05:00
- Status: `polish`
2026-04-20 07:47:32 -05:00
- Tags: `protocol` , `stt`
2026-04-25 23:06:49 -05:00
- Why now: constrained yes/no behavior affects daily-use prompts and was tangled with the alarm/photo/gallery work.
- Current code:
- yes/no detection reads `listenRules` , `clientRules` , and `$YESNO` hints
2026-04-26 08:32:19 -05:00
- covered prompt families include `settings/download_now_later` , `surprises-ota/want_to_download_now` , `surprises-date/offer_date_fact` , `shared/yes_no` , `create/is_it_a_keeper` , `clock/alarm_timer_change` , and `clock/alarm_timer_none_set`
2026-04-25 23:06:49 -05:00
- outbound replies strip global rules and keep the local rule
- no-input fallback for constrained prompts emits local `LISTEN` /`EOS`
2026-04-26 07:37:31 -05:00
- `shared/yes_no` now participates in the STT-failure no-input path instead of staying pending behind `$YESNO` hints
- repeated empty `create/is_it_a_keeper` replies redirect to `@be/idle` after the second miss
2026-04-29 09:48:36 -05:00
- hosted turn results, fallback matches, and local skill redirects include `match.skipSurprises = true` so BE does not launch end-of-skill surprises after normal replies
2026-04-26 07:37:31 -05:00
- Latest evidence:
- `jibo test 22` did not show `Backup_*` HTTP traffic during the backup complaint
2026-04-27 22:13:59 -05:00
- `jibo test 25` again showed backup-in-progress/update-menu blockage without `Backup_*` HTTP traffic; observed cloud traffic was log upload, ASR binary upload, and update check traffic
2026-04-28 08:01:35 -05:00
- `jibo test 26` again had the robot announce backup-in-progress from `@be/surprises-ota` , with no `Backup_*` HTTP target in the capture
2026-04-29 09:00:04 -05:00
- `jibo test 27` repeated that pattern in a smaller capture: the only relevant hosted startup traffic was token/update/log style traffic, while the spoken backup warning was selected by local `@be/surprises-ota`
- Test 27 also showed local `jibo-server-service` reconnect and `Q4-Server_connection_lost` before the voice test, so startup health should be checked before blaming backup prompts on hosted cloud behavior
2026-04-29 09:48:36 -05:00
- `jibo test 28` showed no hosted backup trigger in the focused cloud-version window, but did show BE opening `@be/surprises` after a Nimbus turn because the outgoing match did not carry `skipSurprises`
2026-04-26 07:37:31 -05:00
- stock `@be/surprises-ota` drives the backup notification from robot-local `jibo.scheduler.backupStatus`
2026-04-26 11:20:00 -05:00
- original `surprises-ota` tests make backup and OTA notifications contextual-priority prompts, with repeat suppression through last-notification timestamps
2026-04-26 07:37:31 -05:00
- a spoken `take a backup` command currently routes as generic chat and is not the same as proving the local backup scheduler path
2026-04-28 08:01:35 -05:00
- `jibo test 23` , `jibo test 25` , and `jibo test 26` showed backup-in-progress sluggishness or warnings while backups were active; explicit backup voice launch remains unwired
- Test 26 suggests this should be investigated beside robot-local scheduler status and log/upload load rather than only hosted backup APIs
2026-04-30 07:37:14 -05:00
- `jibo test 30` showed the backup announcement after gallery came from local `@be/surprises` -> `@be/surprises-ota` , not from a hosted `Backup_*` HTTP call; the local `@be/idle` nighttime OTA helper can also initiate backup through `jibo.scheduler.backupRobot`
2026-04-20 07:47:32 -05:00
- Exit criteria:
2026-04-25 23:06:49 -05:00
- spoken `yes` and `no` work on update, backup, share/offer, and gallery/create prompts
- empty or missed short replies retry locally instead of relaunching Nimbus or generic chat
2026-04-29 09:48:36 -05:00
- ordinary Nimbus/chat/cloud-version turns settle without `@be/surprises` / `@be/surprises-ota` opening afterward
2026-04-25 23:06:49 -05:00
- Next action:
2026-04-26 08:32:19 -05:00
- re-run these prompt families in the `1.0.18` live regression pass after the shared yes/no, alarm yes/no, and create no-input fixes
2026-04-29 09:48:36 -05:00
- verify websocket `match.skipSurprises = true` on cloud-version, generic chat, fallback/no-input, and at least one local redirect
2026-04-26 07:37:31 -05:00
- keep explicit backup creation as part of the update/backup/restore proof slice, not as an assumed yes/no prompt test
2026-04-20 07:47:32 -05:00
2026-04-25 23:06:49 -05:00
### 4. Alarm And Photo Gallery Release Regression
2026-04-20 20:24:37 -05:00
2026-04-26 07:37:31 -05:00
- Status: `polish`
2026-04-20 20:24:37 -05:00
- Tags: `protocol` , `stt`
2026-04-25 23:06:49 -05:00
- Why now: this is the main bug-fix theme for `1.0.18` .
- Current code:
2026-04-26 08:32:19 -05:00
- alarm values parse explicit, compact, spaced, comma-separated, hyphenated, and local-context ambiguous times
- short alarm/timer value replies are accepted during clock value follow-up rules instead of being filtered out before parsing
2026-04-30 07:37:14 -05:00
- local clock value follow-up rules now return only `LISTEN` /`EOS` , avoiding the Test 30 duplicate delayed `@be/clock` relaunch after stock clock already consumed a short time reply
2026-04-26 11:20:00 -05:00
- empty alarm/timer value turns complete locally as no-input instead of falling through to generic Nimbus speech
2026-04-25 23:06:49 -05:00
- missing alarm times stay in local `@be/clock` clarification
- alarm cancel can reuse the last active clock domain
2026-04-26 11:20:00 -05:00
- cancel inside a clock value prompt maps to local clock `cancel`
2026-04-26 08:32:19 -05:00
- stock alarm replacement/no-alarm prompts use the constrained yes/no path
2026-04-25 23:06:49 -05:00
- gallery opens as `@be/gallery` ; snapshot and photobooth open through `@be/create`
2026-04-26 11:20:00 -05:00
- empty `gallery/gallery_preview` turns complete locally as no-input instead of relaunching Nimbus fallback speech
2026-04-27 22:13:59 -05:00
- passive gallery/create/settings context no longer reopens stale cloud turns
- active local prompts under gallery/settings contexts are preserved so real short replies are not suppressed as passive context
2026-04-28 08:01:35 -05:00
- context-only or post-skill binary audio tails are ignored until a fresh `LISTEN` , preventing no-`LISTEN` blue-ring buffering loops
2026-04-29 09:00:04 -05:00
- fresh no-transcript hotphrase launch `LISTEN` setup packets are ignored during diagnostic speech-tail cleanup, preventing the Test 27 `Cloudford.` self-listen path
2026-04-28 08:01:35 -05:00
- blank-audio hotphrase turns clear pending listen state and install a short late-audio ignore window
2026-04-26 07:37:31 -05:00
- `shared/yes_no` no-input fallback and repeated create keeper cleanup were added after `jibo test 22`
- Latest evidence:
- gallery opened and handed into create, but repeated `create/is_it_a_keeper` prompts could leave the blue ring/listening state
- alarm recognition collapsed several attempts before a complete alarm value could be set
- `ffmpeg` failures were present during the same test window, so alarm/gallery retest should separate transcript quality from payload shape
2026-04-26 08:32:19 -05:00
- `jibo test 23` set and fired a `7:43 AM` alarm, then failed a later clarify/replacement path when the robot heard `- Time. - 7, 14.` and stock NLU converted that to `7:00 PM`
- `jibo test 23` photo gallery got stuck on `shared/yes_no` turns with empty ASR, not on a transcript-bearing `yes` that the cloud mapped incorrectly
2026-04-26 11:20:00 -05:00
- `jibo test 24` recognized `Yes.` for `clock/alarm_timer_change` , but empty `clock/alarm_set_value` produced `I heard you` ; current source now keeps that as local no-input
- `jibo test 24` showed photo/gallery blue-ring cleanup improved and create keeper completion working, but empty `gallery/gallery_preview` produced `I heard you` ; current source now keeps that as local no-input
2026-04-27 22:13:59 -05:00
- `jibo test 25` showed gallery launching from the observed phrase `open the photogal` , but active `shared/yes_no` prompts under `@be/gallery` could hang; current source now recognizes the alias and preserves active gallery prompts even while ignoring passive gallery tails
- `jibo test 25` showed timer/alarm still needs live follow-up for stale timer state, alarm replacement/PM ambiguity, and voice delete versus robot menu agreement
2026-04-28 08:01:35 -05:00
- `jibo test 26` showed gallery success through empty-gallery yes, create, keep, save, and reopen, but also showed a post-gallery blue-ring/fallback tail now addressed by the no-`LISTEN` binary guard
- `jibo test 26` showed alarm replacement still drifting into value/manual-screen behavior and alarm delete phrases/mishears falling to chat; current source now maps `delete the alarm` , `delete along` , and `delete the along` to local clock delete without keeping follow-up open
2026-04-29 09:00:04 -05:00
- `jibo test 27` showed the no-`LISTEN` guard worked for same-transID binary tails, but a new hotphrase launch `LISTEN` could still capture diagnostic speech tail; current source now blocks that diagnostic-tail shape
2026-04-30 07:37:14 -05:00
- `jibo test 30` showed cloud-version fixed, but the empty-gallery prompt did not visibly light the blue ring for a voice `yes` ; treat the next gallery pass as a proof of local `shared/yes_no` listen ownership, not just cloud payload shape
- `jibo test 30` showed `638` was processed at 6:38:13 AM and stock clock resolved it to `6:38 PM` ; the duplicate replacement prompt matched our extra delayed clock relaunch, now suppressed for local clock follow-up rules
2026-04-26 11:20:00 -05:00
- original clock tests confirm cancel inside the alarm value prompt must close without scheduling, existing-alarm `keep` must preserve KB/scheduler state, and existing-alarm `delete` or `cancel` must clear it
- original gallery tests confirm empty-gallery `yes` redirects to `@be/create` , empty-gallery `no` exits, media-load failure exits, and delete confirmation only deletes on a positive `yes`
2026-04-20 20:24:37 -05:00
- Exit criteria:
2026-04-25 23:06:49 -05:00
- gallery opens, offers to take a picture if empty, accepts `yes` , and hands into create
2026-04-26 11:20:00 -05:00
- alarm set, clarify, replacement yes/no, cancel from value prompt, and cancel/delete flows behave locally and agree with the menu state
- alarm replacement and deletion regression checks verify both websocket payload shape and persistent robot menu state where possible
2026-04-30 07:37:14 -05:00
- short alarm/timer follow-up values do not produce a second `@be/clock` relaunch after the local skill consumes the answer
2026-04-25 23:06:49 -05:00
- failures caused by collapsed STT transcripts are logged as STT issues rather than misdiagnosed as payload bugs
- Next action:
2026-04-26 07:37:31 -05:00
- re-run a stock OS `1.9` regression bundle before declaring `1.0.18` complete
2026-04-20 20:24:37 -05:00
2026-04-25 23:06:49 -05:00
### 5. Optional Small Feature Before `1.0.18` Freeze
2026-04-20 07:47:32 -05:00
2026-04-26 20:19:16 -05:00
- Status: `implemented`
2026-04-25 23:06:49 -05:00
- 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.
2026-04-26 20:19:16 -05:00
- Selected slices:
2026-04-25 23:06:49 -05:00
- Stop command
2026-04-26 20:19:16 -05:00
- 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`
2026-04-27 22:13:59 -05:00
- stop/cancel matching now normalizes stock ASR punctuation, so `Never mind.` is still a stop command
- absolute volume parsing now treats the observed homophone shape `Set Volume 2-6.` as level `6`
- passive settings context and `settings/volume_control` no-input cleanup now avoid post-panel `I heard you` fallback speech
2026-04-28 08:01:35 -05:00
- local clock delete/cancel commands now settle without a generic follow-up mic
2026-04-26 20:19:16 -05:00
- 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
2026-04-28 08:01:35 -05:00
- `jibo test 26` live-proved punctuated `Never mind.` and the `Set Volume 2-6.` homophone path
2026-04-26 20:19:16 -05:00
- 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
2026-04-27 22:13:59 -05:00
- live volume controls settles after the panel opens without a trailing `I heard you`
2026-04-25 23:06:49 -05:00
## Implemented In Current Source
### ESML Apostrophe Encoding Bug
- Status: `implemented`
- Tags: `polish`
- Result:
- apostrophes remain natural in spoken ESML
- `&` , `<` , `>` , and `"` are still escaped
- covered by `ResponsePlanMapper_EscapesSpeechWithoutEncodingApostrophes`
- Follow-up:
- none unless a live capture proves another ESML escaping edge case
### Radio First Pass
- Status: `implemented`
- Tags: `protocol`
- Result:
- phrase routing and websocket redirect/completion are implemented for radio resume/open and genre launch
- Follow-up:
- live validation remains in the immediate queue
### News First Pass
- Status: `implemented`
2026-04-20 07:47:32 -05:00
- Tags: `protocol` , `content`
2026-04-25 23:06:49 -05:00
- Result:
- Nimbus-shaped `news` cloud-skill lane is implemented with synthetic briefing content
- Follow-up:
2026-04-26 08:32:19 -05:00
- basic live validation passed in `jibo test 23`
2026-04-25 23:06:49 -05:00
- provider-backed headlines belong in `1.0.19` or later
### Clock / Alarm Family
- Status: `implemented`
- Tags: `protocol`
- Result:
- time/date/day and clock open route through local `@be/clock`
- timer/alarm menu, value, clarify, and delete are implemented
2026-04-26 08:32:19 -05:00
- compact, spoken, comma-separated, and local-context alarm parsing has focused tests
- short clock value replies under `clock/alarm_set_value` and `clock/timer_set_value` are not filtered out by websocket finalization
2026-04-26 11:20:00 -05:00
- empty clock value turns produce local no-input instead of generic Nimbus fallback speech
- `CLIENT_NLU cancel` inside a clock value prompt maps to local clock `cancel`
2026-04-26 08:32:19 -05:00
- alarm replacement/no-alarm yes/no prompts are mapped as constrained local prompts
2026-04-26 11:20:00 -05:00
- client NLU alarm clarify/cancel cases from `jibo test 20` , `jibo test 21` , and `jibo test 24` are reflected in source
2026-04-25 23:06:49 -05:00
- Follow-up:
- live regression remains in the immediate queue
2026-04-26 11:20:00 -05:00
- add fixture coverage for original clock-test branches that are not yet mirrored in `.NET` : no-alarm query `yes` /`no` , existing-alarm `keep` versus `delete` , and cross-domain `OtherSet` behavior
2026-04-28 08:01:35 -05:00
- Test 26 still requires a focused live check for alarm replacement, voice delete versus menu state, and whether the no-`LISTEN` guard removes the long blue-ring loop
2026-04-25 23:06:49 -05:00
### Photo / Gallery / Create Family
- Status: `implemented`
- Tags: `protocol` , `storage`
- Result:
- gallery, snapshot, and photobooth voice paths route to the correct local skills
2026-04-27 22:13:59 -05:00
- the observed `open photogal` transcript routes to gallery
2026-04-25 23:06:49 -05:00
- media metadata persists locally
- `/media/{path}` serves the current text-body placeholder payload
2026-04-26 11:20:00 -05:00
- empty `gallery/gallery_preview` turns produce local no-input instead of generic Nimbus fallback speech
2026-04-27 22:13:59 -05:00
- active `shared/yes_no` prompts under `@be/gallery` stay active instead of being suppressed as passive local context
2026-04-26 07:37:31 -05:00
- repeated empty `create/is_it_a_keeper` turns redirect to `@be/idle` after the second miss
2026-04-25 23:06:49 -05:00
- Follow-up:
- live regression remains in the immediate queue
2026-04-26 11:20:00 -05:00
- add fixture coverage for original gallery-test branches that are not yet mirrored in `.NET` : empty-gallery `yes` redirect to create, empty-gallery `no` exit, media-load failure exit, and delete confirmation `yes` /`no`
2026-04-25 23:06:49 -05:00
- binary-safe media storage remains future work
2026-04-26 07:37:31 -05:00
### Constrained Yes-No Cleanup
- Status: `implemented`
- Tags: `protocol` , `stt`
- Result:
- `shared/yes_no` is included in yes/no STT-failure detection
- local no-input replies strip global rules and keep the active constrained rule
2026-04-26 08:32:19 -05:00
- update, OTA, share/date-offer, gallery shared yes/no, alarm replacement/no-alarm, and create keeper rules share the same no-input fallback machinery
2026-04-26 07:37:31 -05:00
- Follow-up:
2026-04-26 08:32:19 -05:00
- live update/backup/share/gallery/alarm replacement prompts still need another clean pass
2026-04-26 07:37:31 -05:00
2026-04-29 09:00:04 -05:00
### Cloud Version Tail Cleanup
- Status: `implemented`
- Tags: `protocol`
- Result:
- `cloud_version` no longer keeps the generic follow-up mic open
- diagnostic speech receives an eight-second late-audio ignore window
- no-transcript hotphrase launch `LISTEN` setup packets inside that cleanup window are ignored before they can reopen a stale turn
2026-04-30 00:21:33 -05:00
- spoken diagnostic wording is now `Cloud version ...` rather than `Open Jibo Cloud version ...` , avoiding the self-hotphrase phrase found in Test 29
2026-04-29 09:00:04 -05:00
- focused websocket coverage reproduces the Test 27 `Cloudford.` shape: cloud-version speech, tail `LISTEN` , and binary speech tail
- Follow-up:
2026-04-30 00:21:33 -05:00
- live smoke should confirm `cloud version` speaks `1.0.18` , carries `match.skipSurprises = true` , does not stop itself on the word `Jibo` , and settles without a generic `I heard...` reply or a local surprise handoff
2026-04-29 09:48:36 -05:00
### End-Of-Skill Surprise Suppression
- Status: `implemented`
- Tags: `protocol`
- Result:
- hosted `LISTEN` matches, fallback `LISTEN` matches, and local `SKILL_REDIRECT` matches emit `skipSurprises = true`
- focused websocket assertions cover generic chat, cloud version, no-transcript fallback, and a local clock redirect
- Test 28 evidence ties the repeated backup warning to the local `@be/surprises` lifecycle path after Nimbus, with no corresponding hosted `Backup_*` traffic
2026-04-30 00:21:33 -05:00
- Test 29 showed the deployed payload reached stock BE and did not repeat the backup announcement in the focused run
2026-04-29 09:48:36 -05:00
- Follow-up:
- live regression should confirm normal Nimbus/cloud/local turns no longer open `@be/surprises` or `@be/surprises-ota` after completion
2026-04-29 09:00:04 -05:00
2026-04-25 23:06:49 -05:00
### Word Of The Day Cleanup
- Status: `implemented`
- Tags: `protocol`
- Result:
- voice launch uses menu-shaped local payload plus redirect/completion
- structured and spoken guesses complete correctly
- line-number guesses use hint order
- close hint matching handles near misses
- `right_word` cleanup can no-input close and redirect to `@be/idle`
- late same-turn audio is ignored during cleanup
- Follow-up:
- keep this in regression coverage because it shares turn-state machinery with gallery and alarm flows
2026-04-26 20:19:16 -05:00
### Stop And Volume First Pass
- Status: `implemented`
- Tags: `protocol`
- Result:
- global stop commands emit stock `global_commands` `stop` and redirect to `@be/idle`
2026-04-27 22:13:59 -05:00
- stop/cancel command matching tolerates punctuation from stock ASR
2026-04-26 20:19:16 -05:00
- relative volume commands emit stock `global_commands` `volumeUp` / `volumeDown`
2026-04-27 22:13:59 -05:00
- absolute volume commands emit `volumeToValue` with a `volumeLevel` entity, including the observed `Set Volume 2-6.` shape
2026-04-26 20:19:16 -05:00
- volume controls launch redirects to `@be/settings` `volumeQuery`
2026-04-27 22:13:59 -05:00
- passive settings context and `settings/volume_control` no-input cleanup avoid stale generic speech after the settings panel opens
2026-04-26 20:19:16 -05:00
- 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
2026-04-25 23:06:49 -05:00
### Unknown OpenJibo Event Noise
- Status: `implemented`
- Tags: `protocol`
- Result:
- current websocket service drops unknown inbound message types silently
- synthetic `OPENJIBO_TURN_PENDING` , `OPENJIBO_CONTEXT_ACK` , and fallback `OPENJIBO_ACK` should no longer be emitted by current source
- Follow-up:
2026-04-26 07:37:31 -05:00
- `jibo test 22` still captured those event types from the deployed run, so the next deployment must verify the artifact/build as well as source
2026-04-25 23:06:49 -05:00
### Update Phantom Manifest Fix
- Status: `implemented`
- Tags: `protocol` , `storage`
- Result:
- `GetUpdateFrom` returns an empty object when no update is staged
- staged updates can still be created explicitly
- Follow-up:
- end-to-end update delivery and restore proof remains future work
## Near-Term `1.0.19` Queue
### 6. Stop Command
2026-04-26 20:19:16 -05:00
- Status: `polish`
2026-04-25 23:06:49 -05:00
- Tags: `protocol`
- User goals:
- `stop`
- `stop that`
- `never mind`
- Evidence:
- `@be/idle` exists and is already used as a cleanup redirect target
2026-04-26 20:19:16 -05:00
- current `1.0.18` source emits stock `global_commands` `stop` plus local `@be/idle` redirect
2026-04-25 23:06:49 -05:00
- Questions:
2026-04-26 20:19:16 -05:00
- whether live stock OS treats the combined global stop plus idle redirect as cleanly as expected during active local skills
2026-04-20 07:47:32 -05:00
- Exit criteria:
2026-04-25 23:06:49 -05:00
- a spoken stop command settles the robot locally without a generic chat reply
2026-04-20 07:47:32 -05:00
2026-04-25 23:06:49 -05:00
### 7. Volume Up / Volume Down Voice Control
2026-04-20 07:47:32 -05:00
2026-04-26 20:19:16 -05:00
- Status: `polish`
2026-04-20 07:47:32 -05:00
- Tags: `protocol`
2026-04-25 23:06:49 -05:00
- User goals:
- `turn it up`
- `turn it down`
- `increase the volume`
- `decrease the volume`
- Evidence:
2026-04-26 20:19:16 -05:00
- 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`
2026-04-25 23:06:49 -05:00
- Questions:
2026-04-26 20:19:16 -05:00
- whether live stock OS applies the global volume event from the hosted cloud response without any additional local event payload
2026-04-20 07:47:32 -05:00
- Exit criteria:
2026-04-25 23:06:49 -05:00
- relative voice volume commands adjust volume without generic cloud speech
2026-04-20 07:47:32 -05:00
2026-04-25 23:06:49 -05:00
### 8. Update, Backup, And Restore End-To-End Proof
2026-04-20 07:47:32 -05:00
2026-04-25 23:06:49 -05:00
- Status: `ready`
- Tags: `protocol` , `storage` , `docs`
- Why next:
- prompt routing is improved, but lifecycle proof is still missing
2026-04-20 07:47:32 -05:00
- Current evidence:
2026-04-25 23:06:49 -05:00
- `@be/settings` contains update and backup flows
- `@be/restore` waits for a UGC key, runs restore, and reboots
2026-04-26 11:20:00 -05:00
- original OTA surprise tests treat backup/download status as robot-local scheduler state, not as a direct cloud backup command path
2026-04-25 23:06:49 -05:00
- no-op update fabrication has been removed from `.NET`
2026-04-27 22:13:59 -05:00
- Test 25 still showed repeated backup-in-progress/update-menu blockage without `Backup_*` HTTP traffic
2026-04-28 08:01:35 -05:00
- Test 26 repeated the backup-in-progress warning from robot-local `@be/surprises-ota` without `Backup_*` HTTP traffic
2026-04-29 09:00:04 -05:00
- Test 27 repeated the same no-`Backup_*` finding and added evidence of local startup reconnect / `Q4-Server_connection_lost` before the test
2026-04-29 09:48:36 -05:00
- Test 28 showed the same class of surprise handoff beginning at `@be/surprises` after Nimbus, before VAD inhibited the offer
2026-04-20 07:47:32 -05:00
- Exit criteria:
2026-04-25 23:06:49 -05:00
- no phantom "always has updates" behavior
- one controlled update can be staged and delivered
- one controlled backup can be taken
- restore behavior is documented well enough to recover a test robot intentionally
2026-04-20 07:47:32 -05:00
2026-04-25 23:06:49 -05:00
### 9. STT Upgrade And Noise Screening
2026-04-20 23:09:22 -05:00
- Status: `ready`
2026-04-25 23:06:49 -05:00
- Tags: `stt`
- Why next:
- feature paths are now often correct when a transcript exists, but short replies and low-quality audio still block otherwise-correct flows
2026-04-20 23:09:22 -05:00
- Current evidence:
2026-04-26 08:32:19 -05:00
- `jibo test 22` showed `ffmpeg` and `whisper.cpp` failures
- `jibo test 23` did not show the same decode failure pattern, but gallery yes/no turns still produced empty ASR
2026-04-26 11:20:00 -05:00
- `jibo test 24` still had collapsed or empty transcripts in alarm/gallery paths, including `Sudden alarm.` , `I'm setting alarm for seven.` , empty clock value input, and empty gallery preview input
2026-04-27 22:13:59 -05:00
- `jibo test 25` still had short-answer failures, but several were cloud turn-state issues now patched rather than pure STT failures
2026-04-28 08:01:35 -05:00
- `jibo test 26` had long no-`LISTEN` binary buffering and alarm-delete mishears now patched; remaining short-answer failures still need STT/noise work
2026-04-26 07:37:31 -05:00
- current source now skips local whisper when buffered audio does not contain an Opus identification header
2026-04-25 23:06:49 -05:00
- yes/no and alarm flows are especially sensitive to short or collapsed transcripts
2026-04-20 23:09:22 -05:00
- Implementation notes:
2026-04-25 23:06:49 -05:00
- add lightweight waveform or energy screening before transcription
- compare managed STT against the local toolchain
- keep synthetic transcript hints for fixture replay
### 10. Hosted Capture And Storage Plan
- Status: `ready`
- Tags: `docs` , `storage`
- Why next:
- repo-local captures work for single-operator testing, but group testing needs a cleaner archival/export boundary
- Implementation notes:
- define local capture sinks versus hosted retention
- decide how testers submit noteworthy sessions
- preserve sanitized fixtures as the durable parity artifact
### 11. Binary-Safe Media Storage
- Status: `ready`
- Tags: `storage` , `protocol`
- Why next:
- the first gallery bridge stores metadata and text-body placeholders, but final gallery support needs originals and thumbnails
- Questions:
- whether stock gallery expects originals, thumbnails, or both
- what upload metadata must survive for gallery refresh
- how to map this cleanly to Blob Storage
2026-04-20 23:09:22 -05:00
2026-04-20 07:47:32 -05:00
## Discovery Queue
2026-04-25 23:06:49 -05:00
### 12. Weather As Cloud Report Plus Local Presentation
2026-04-20 07:47:32 -05:00
- Status: `discovery`
- Tags: `protocol` , `content`
2026-04-25 23:06:49 -05:00
- Evidence:
- Nimbus and Pegasus contain personal-report weather assets and Lasso provider hooks
- no standalone `@be/weather` package has been confirmed in the inspected Be skill inventory
- Questions:
- whether weather is a dedicated cloud skill, a personal-report branch, or both
- what payload shape triggers local animation and weather presentation
2026-04-20 07:47:32 -05:00
2026-04-25 23:06:49 -05:00
### 13. Provider-Backed News
- Status: `ready`
- Tags: `content`
- Why later:
- first protocol path is implemented, but content is synthetic
- Questions:
- which source should provide headlines for hosted OpenJibo
- whether news belongs under a broader Lasso-style aggregation service
- how to keep content short and Jibo-native
2026-04-26 11:20:00 -05:00
- Source-backed implementation notes:
- original report-skill news tests expect default general, technology, sports, and business headlines for unidentified users
- category counts are preference-dependent: one active category gets multiple headlines, two categories get two each, and three or more get one each
- filter items without summaries, corrections, duplicate headlines, banned words, and adult headlines for children or unidentified speakers
- include image view metadata with unique IDs, category labels, source image URLs, and sane scaling
2026-04-25 23:06:49 -05:00
### 14. Proactivity Selector And Surprise Offers
2026-04-20 22:00:07 -05:00
- Status: `discovery`
- Tags: `protocol` , `content` , `docs`
2026-04-25 23:06:49 -05:00
- Evidence:
- original architecture materials show cloud-side `Proactivity Selector` , `Proactivity Catalog` , and robot-side proactive trigger plumbing
- live captures include a proactive-style `I have something to share with you` offer and later proactive `TRIGGER` traffic
- `@be/surprises` , `@be/surprises-date` , and `@be/surprises-ota` exist as local robot-side building blocks
- Questions:
- minimum hosted selector for stock-OS-compatible surprise offers
- how proactive `TRIGGER` traffic maps into OpenJibo
- whether `surprises-date/offer_date_fact` should be the first intentional proactive offer
2026-04-20 22:00:07 -05:00
2026-04-25 23:06:49 -05:00
### 15. Surprises Routing
2026-04-20 07:47:32 -05:00
- Status: `discovery`
- Tags: `protocol` , `content`
2026-04-25 23:06:49 -05:00
- Evidence:
- `@be/surprises` is a router rather than one experience
- `surprises-date` and `surprises-ota` show category-specific branches
- Questions:
- whether `surprise me` should enter the top-level surprise router
- which categories depend on cloud services
2026-04-26 06:13:21 -05:00
- whether stock OS `1.9` differs from the `x.x` source snapshot
2026-04-20 07:47:32 -05:00
2026-04-25 23:06:49 -05:00
### 16. History / Memory Layer
2026-04-20 22:00:07 -05:00
- Status: `discovery`
2026-04-25 23:06:49 -05:00
- Tags: `content` , `storage` , `docs`
- Evidence:
- Pegasus includes a `history` package
- original architecture materials call out cloud-side history
- stock behavior historically included names, birthdays, holidays, and personal dates
- Questions:
- what belongs in memory versus account/profile versus skill-specific storage
- first safe OpenJibo memory slice
- privacy and hosted-data boundaries
### 17. Lasso / Knowledge And Event Aggregation
2026-04-20 22:00:07 -05:00
- Status: `discovery`
- Tags: `content`
2026-04-25 23:06:49 -05:00
- Evidence:
- Pegasus `packages/lasso` is a provider credential and data aggregation service
- original architecture connected Lasso to AP News, Dark Sky, Google Calendar, Wolfram, and other providers
- Questions:
- recreate Lasso as one aggregation service or several focused providers
- which parts are needed for news, weather, calendar, commute, holidays, and special dates
2026-04-20 22:00:07 -05:00
2026-04-25 23:06:49 -05:00
### 18. Personal Report, Calendar, And Commute
2026-04-20 07:47:32 -05:00
- Status: `discovery`
- Tags: `protocol` , `content`
2026-04-25 23:06:49 -05:00
- Evidence:
- current `.NET` catalog has placeholder replies
- Nimbus has personal-report hooks and assets
- Questions:
- whether calendar and commute are independent feature paths or personal-report sections
- minimum provider data shape for natural Jibo presentation
### 19. Who Am I / Identity Management
2026-04-20 23:09:22 -05:00
- Status: `discovery`
2026-04-25 23:06:49 -05:00
- Tags: `protocol` , `content` , `storage`
- Evidence:
- `@be/who-am-i` exists
- source references `jibo.kb.loop` , owner/member lookup, enrollment, and name collection
- Questions:
- recognition, enrollment, rename, and profile-correction boundaries
- split between local state and hosted cloud state
- first useful hosted identity slice
2026-04-20 23:09:22 -05:00
2026-04-25 23:06:49 -05:00
### 20. Onboarding, Loop Management, And Fresh Start
2026-04-20 23:09:22 -05:00
- Status: `discovery`
2026-04-25 23:06:49 -05:00
- Tags: `protocol` , `docs` , `storage`
- Evidence:
- `@be/first-contact` , `@be/introductions` , `@be/tutorial` , `@be/restore` , and `@be/who-am-i` exist
- current `.NET` loop/account state is still mostly scaffolded
- Questions:
- how to provision an owner without the original mobile app
- how to add, remove, and re-enroll loop members
- whether the first replacement is operator-only, a lightweight web app, or both
2026-04-20 23:09:22 -05:00
2026-04-25 23:06:49 -05:00
### 21. How Old Are You / Robot Age Persona
2026-04-21 21:47:46 -05:00
- Status: `discovery`
- Tags: `protocol` , `content`
- User goals:
- `how old are you`
2026-04-25 23:06:49 -05:00
- answer from stored first-powered-up or first-cloud-seen metadata
- optional zodiac/personality flavor when available
- Questions:
- where stock Jibo stores first-power-up or birthdate metadata
- whether a stock persona path exists
- whether first OpenJibo pass should use first-cloud-seen metadata if stock data is unavailable
### 22. Command Vs Question Reply Style
2026-04-21 21:47:46 -05:00
- Status: `ready`
- Tags: `content` , `polish`
- User goals:
2026-04-25 23:06:49 -05:00
- `dance` should behave like a willing action
- `do you like to dance` should answer the question before or instead of treating it like the same command
2026-04-21 21:47:46 -05:00
- Implementation notes:
2026-04-25 23:06:49 -05:00
- evolve reply collections into command/question variants
- start with dance or another expressive skill
- keep the first version rule-based
2026-04-21 21:47:46 -05:00
2026-04-25 23:06:49 -05:00
## Suggested Order
2026-04-20 07:47:32 -05:00
2026-04-25 23:06:49 -05:00
Before closing `1.0.18` :
2026-04-20 07:47:32 -05:00
2026-04-25 23:06:49 -05:00
1. Radio live validation
2026-04-26 08:32:19 -05:00
2. Basic news regression, with provider-backed expansion deferred
2026-04-25 23:06:49 -05:00
3. Backup / OTA / share yes-no regression
4. Alarm and photo/gallery regression
2026-04-26 20:19:16 -05:00
5. Stop and volume first-pass validation
2026-04-20 07:47:32 -05:00
2026-04-26 20:03:30 -05:00
Use [regression-test-plan.md ](regression-test-plan.md ) as the detailed checklist for this sequence.
2026-04-25 23:06:49 -05:00
For `1.0.19` :
2026-04-20 07:47:32 -05:00
2026-04-26 20:19:16 -05:00
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
2026-04-25 23:06:49 -05:00
2. Update, backup, and restore proof
3. STT upgrade and noise screening
4. Hosted capture/storage plan
5. Binary-safe media storage
6. Provider-backed news or weather
7. Proactivity, memory/history, Lasso, identity, and onboarding as larger discovery-driven tracks