21 KiB
21 KiB
Feature Backlog
Purpose
This backlog turns the current discovery work into a concrete implementation queue for the hosted .NET cloud.
Use it as the source of truth for the next feature slice instead of continuing the same investigation in chat each time.
How To Use This Backlog
- Pick one slice.
- Confirm the target payload shape from captures and robot source.
- Implement the smallest working parity path in
.NET. - Test it live on stock OS
1.9. - Update this file with results, regressions, and next guesses before moving on.
Status key:
ready: grounded enough to implement nowdiscovery: more robot-source or capture work needed firstpolish: behavior exists but needs cleanup
Parallel tags:
protocol: websocket / turn-shape workcontent: provider or cloud content workdocs: runbook / operator guidancestt: transcript reliability work
Immediate Queue
1. Radio Resume And Genre Launch
- Status:
ready - Tags:
protocol - Why now:
@be/radiois a real local skill and is the clearest low-risk expansion after Word of the Day. - User goals:
open the radioshould resume the current or last stationplay country musicshould open a country station on iHeartRadio
- Current evidence:
- index.js resumes from
lastStation - the same file treats
menuas aplaylaunch and readsresult.nlu.entities.station - the same file confirms
menu + no stationis the clean resume path andmenu + station=Countrybecomes a direct genre launch
- index.js resumes from
- Implementation notes:
- add phrase routing for radio open/resume and genre launch
- inspect radio genre and station metadata before locking the outbound entity values
- prefer the same payload shape the menu path uses instead of a generic cloud speech reply
- Exit criteria:
- voice
open the radiolaunches radio successfully - voice
play country musiclaunches a country station - no fallback cloud placeholder reply is spoken on success
- voice
2. ESML Apostrophe Encoding Bug
- Status:
ready - Tags:
polish - Why now: this is a small, high-confidence speech quality bug affecting many paths.
- Current evidence:
- ResponsePlanToSocketMessagesMapper.cs currently escapes
'to' - the robot is pronouncing the encoded form instead of treating it as natural text
- ResponsePlanToSocketMessagesMapper.cs currently escapes
- Implementation notes:
- stop encoding apostrophes in spoken ESML text unless a capture proves a narrower escaping rule is needed
- keep escaping for
&,<, and>
- Exit criteria:
- contractions and possessives sound natural again in live speech
3. Backup / OTA Yes-No Reliability
- Status:
ready - Tags:
protocol,stt - Why now: the update and backup prompts are real daily-use system flows and still feel fragile.
- Current evidence:
surprises-otais a real robot-side skill family in index.js- we already improved constrained yes-no routing, but live tests still show some turns collapse into empty transcript or generic speech
- Implementation notes:
- keep local rules only on constrained replies
- improve empty-turn retry behavior for settings and OTA prompts
- capture whether stock OS uses a different yes-no prompt shape in backup versus update flows
- investigate why the current cloud wiring appears to make the robot think updates are constantly available
- Exit criteria:
- spoken
yesandnoreliably work on backup and update prompts - empty or missed turns retry locally without relaunching Nimbus
- spoken
4. Proactive Share / Offer Yes-No Reliability
- Status:
ready - Tags:
protocol,stt - Why now: the latest capture bundle shows a second yes-no family where the robot asks whether it can share something, and spoken
yesis still being handled like unconstrained speech instead of a reply to the active prompt. - Current evidence:
- the attached
jibo test 13session includes both examples in one bundle:- a proactive or share-style prompt where spoken
yeswas treated as generic speech - a later update prompt where spoken
nowas accepted correctly
- a proactive or share-style prompt where spoken
- the share prompt uses
surprises-date/offer_date_factwith$YESNO, and the failing reply leakedglobals/*rules back into a Nimbus relaunch
- the attached
- Implementation notes:
- compare the active listen rules, ASR hints, and local skill ownership for the share-style prompt versus OTA prompts
- make constrained yes-no detection cover this prompt family without regressing the already-working update
nopath - prefer local retry or local completion behavior over falling back into generic chat or Nimbus
- Exit criteria:
- spoken
yesandnowork on share / offer prompts with the same reliability as the OTA path - constrained yes-no handling is generalized by prompt family instead of hard-coded only for updates
- spoken
Near-Term Queue
5. News Through Nimbus / Personal Report
- Status:
ready - Tags:
protocol,content - Why now: Nimbus already exposes a
newscloud hook, so this is the next best cloud-first skill after radio. - Current evidence:
- ProcessCloud.ts checks for
cloudSkill === 'news' - Nimbus analytics and assets also reference
personal-report
- ProcessCloud.ts checks for
- Implementation notes:
- decide whether the first pass is a simple headline summary or a closer personal-report style payload
- confirm whether stock OS expects
newsas a dedicated cloud skill or under the broader personal-report family
- Latest progress:
- first pass should use Nimbus's supported cloud path by setting
match.cloudSkill = newsand returning a supportedSLIMannouncement - provider-backed headlines can follow later under the
Lasso / Knowledge And Event Aggregationtrack
- first pass should use Nimbus's supported cloud path by setting
- Exit criteria:
tell me the newsreaches a non-placeholder live path- robot behavior feels Nimbus-native rather than generic chat playback
6. Clock Family Audit
- Status:
in_progress - Tags:
protocol - Why now: clock, date, timer, and alarm menu hooks are already visible in captures and the robot repo has a real
@be/clockskill. - Current evidence:
- protocol-inventory.md already tracks menu intents for
askForTime,askForDate,timerValue, andalarmValue @be/clockexists in the robot skill inventoryJiboOsshows@be/clockbranches onentities.domain = clock | timer | alarm, usesintent = menufor menu launches, and accepts directtimerValue/alarmValueutterances with structured entities
- protocol-inventory.md already tracks menu intents for
- Implementation notes:
- compare our custom time/date path against actual menu payloads
- decide whether timer and alarm should stay robot-local with cloud acknowledgement, or whether cloud needs to shape the launch and follow-up turns
- Progress so far:
- voice
open the clocknow routes to the direct localaskForTimeclock-view path instead of the broader clock menu - voice
what time is it,what's today's date, andwhat day is itnow use stock-shaped local@be/clockhandoffs instead of custom cloud-only speech - voice
set a timer for five minutes,set an alarm for 7:30 am,set an alarm for 830, andset an alarm for 8 30now emit directtimerValue/alarmValuepayloads with the entities the local skill expects - partial timer/alarm requests such as
set a timerandset an alarmnow stay on a controlled clarification reply path instead of drifting into Nimbus/chat echo
- voice
- Exit criteria:
- time/date behavior stays correct
- timer and alarm launch or set correctly from both menu and voice where applicable
7. Photo Family Audit
- Status:
in_progress - Tags:
protocol,docs - Why now: photo confirmation improved already, and the robot skill inventory includes
gallery. - Current evidence:
@be/galleryexists in the robot skill inventory- current captures already show
snapshotand related menu destinations JiboOsshows@be/galleryopens fromintent = menu, whilesnapshotandphotoboothactually map into@be/createwithcreateOnePhotoandcreateSomePhotos
- Implementation notes:
- separate three flows:
- snap a picture
- photo gallery
- photobooth
- document whether each one is local-only, cloud-assisted, or upload-backed
- separate three flows:
- Progress so far:
- voice
open photo gallerynow launches local@be/gallerywith a stock-shapedmenuhandoff - voice
snap a picturenow launches local@be/createwithcreateOnePhoto - voice
open photoboothnow launches local@be/createwithcreateSomePhotos - media and update metadata now persist to a local state file in the hosted
.NETpath, so gallery and staged update state are no longer strictly process-memory-only Media.Createnow retains uploaded metadata plus a best-effort raw body placeholder and serves the same media URL back through/media/{path}
- voice
- Open questions:
- whether stock Jibo treats captured media as a short-lived local cache until cloud upload completes
- what binary upload path and metadata are needed so gallery content persists instead of aging out locally
- whether hosted OpenJibo should store originals, thumbnails, or both
- whether the current lossy HTTP body capture is enough for stock gallery thumbnails, or whether we need a binary-safe upload persistence path next
- Exit criteria:
- known photo menu and voice phrases map to the correct local path
- capture storage expectations are documented for laptop versus hosted testing
8. Update, Backup, And Restore End-To-End Proof
- Status:
ready - Tags:
protocol,docs - Why now: prompt routing is only part of the lifecycle; we still need to prove a realistic maintenance and recovery story.
- Current evidence:
@be/settingscontains update flows and explicitjibo.kb.loop.hasKeyBackup(...)checks for key-backup state@be/restoreis a dedicated local skill that waits for a UGC key, runsjibo.systemManager.restore(...), and reboots on completion or failure- live behavior suggests the current cloud may be advertising updates too eagerly, leaving the robot thinking updates are always pending
- Implementation notes:
- inspect how OpenJibo advertises update manifests so the robot does not repeatedly think an update exists when nothing meaningful is pending
- prove one successful backup path, one successful update delivery path, and one successful restore path
- document the operator steps, risk boundaries, and recovery expectations before broader rollout
- Latest progress:
- unstaged update queries no longer fabricate a placeholder no-op manifest, which should reduce the phantom
always has updatesbehavior during normal operation - real staged updates can still be created explicitly through the protocol layer when we are ready to prove end-to-end delivery
- unstaged update queries no longer fabricate a placeholder no-op manifest, which should reduce the phantom
- Exit criteria:
- no phantom "always has updates" behavior in normal operation
- one controlled update can be delivered successfully
- one controlled backup can be taken successfully
- restore behavior is understood and documented well enough to recover a test robot intentionally
Discovery Queue
9. Weather As Cloud Report Plus Local Presentation
- Status:
discovery - Tags:
protocol,content - Why later: there is strong evidence for weather assets under Nimbus, but not for a standalone local skill package.
- Current evidence:
- Nimbus assets include personal-report weather content
- no standalone
@be/weatherpackage is present in the inspected Be skill inventory
- Questions to answer:
- is weather a dedicated cloud skill, a personal-report branch, or both
- what payload shape triggers the local animation / embodiment layer
- whether the first pass should be cloud speech only or forecast plus presentation metadata
10. Proactivity Selector And Surprise Offers
- Status:
discovery - Tags:
protocol,content,docs - Why later: the original architecture and recent proactive captures suggest proactivity is a first-class cloud subsystem, not just ordinary chat that starts itself.
- Current evidence:
- the attached original Jibo architecture diagram shows a cloud-side
Proactivity Selector,Proactivity Catalog, and robot-side proactive trigger plumbing - jibo test 13.txt and its websocket artifacts show a proactive-style
I have something to share with youoffer and later proactiveTRIGGERtraffic @be/surprises,@be/surprises-date, and@be/surprises-otaalready exist as local robot-side building blocks
- the attached original Jibo architecture diagram shows a cloud-side
- Questions to answer:
- what minimum cloud-side selector we need for stock-OS-compatible surprise offers
- how proactive
TRIGGERtraffic should map into a hosted OpenJibo proactivity service - whether
surprises-date/offer_date_factshould be the first end-to-end proactive offer we intentionally support
- Implementation notes:
- model proactivity as its own orchestrator separate from ordinary conversational turn routing
- include offer, constrained yes/no, fulfillment, and dismissal behavior in the design
- preserve the artifact linkage to the original architecture diagram and
jibo-test-13
11. Surprises Routing
- Status:
discovery - Tags:
protocol,content - Why later:
@be/surprisesis a router, not a single experience, so we should not wire this blindly. - Current evidence:
- SurpriseSkill.ts selects among surprise categories
surprises-dateandsurprises-otashow category-specific branches already exist
- Questions to answer:
- should
surprise meenter the top-level surprise router - which categories still depend on cloud services versus fully local logic
- whether stock OS
1.9differs materially from the3.1source snapshot here
- should
12. History / Memory Layer
- Status:
discovery - Tags:
content,docs - Why later: the original architecture explicitly calls out
History, and that likely maps to the kind of durable personal memory we want for names, preferences, and remembered facts. - Current evidence:
- the attached original Jibo architecture diagram includes a dedicated
Historycomponent in cloud storage - stock Jibo behavior historically included awareness of names, birthdays, holidays, and special dates
- the attached original Jibo architecture diagram includes a dedicated
- Questions to answer:
- what data belongs in memory versus account/profile versus skill-specific storage
- how much of the original behavior was robot-local versus cloud-backed
- what the first safe OpenJibo memory slice should be
- Implementation notes:
- plan for person identity, preferred name, birthday, relationship facts, and notable dates
- keep the first design privacy-aware and easy to host
- treat this as shared infrastructure that other skills can consume rather than a standalone feature
13. Lasso / Knowledge And Event Aggregation
- Status:
discovery - Tags:
content - Why later: the original architecture diagram suggests
Lassosits between the hub and outside data sources, which likely explains how Jibo knew about news, calendar items, holidays, and other structured world events. - Current evidence:
- the attached original Jibo architecture diagram shows
Lassoconnected to 3rd-party data such as AP News, Dark Sky, GCalendar, Wolfram, and other external sources - stock Jibo behavior historically covered holidays, birthdays, special events, and topical knowledge
- the attached original Jibo architecture diagram shows
- Questions to answer:
- whether
Lassoshould be recreated as a single aggregation service or as several focused providers behind a shared interface - which parts are needed for news, weather, calendar, commute, astrology/date facts, and holidays
- what subset is practical for a hosted OpenJibo v1
- whether
- Implementation notes:
- treat holidays and special dates as first-class backlog scope here
- use this item to drive future provider work for news, weather, calendar, commute, and event awareness
14. Personal Report, Calendar, And Commute
- Status:
discovery - Tags:
protocol,content - Why later: these are already stubbed in
.NET, but the robot-side ownership still needs clearer mapping. - Current evidence:
- current
.NETplaceholders live in InMemoryJiboExperienceContentRepository.cs - Nimbus has personal-report hooks, but the exact cloud contract still needs confirmation
- current
- Questions to answer:
- should calendar and commute be independent feature paths or sections inside personal report
- what minimum provider data shape lets Jibo present these naturally
15. Who Am I / Identity Management
- Status:
discovery - Tags:
protocol,content,docs - Why later: there is a real local
@be/who-am-iskill, which likely covers user identification, name capture, and enrollment cues that matter for a modern identity layer. - Current evidence:
@be/who-am-iexists in the stock skill inventory- the skill source references
jibo.kb.loop, loop owner / loop member lookup, enrollment state, hypothesis views, and aWho Am I_ Collect Nameflow
- Questions to answer:
- whether
who am Iis primarily recognition, enrollment, or profile correction - how name, face, and voice enrollment were originally split between robot-local state and cloud services
- what the minimum hosted-cloud contract is to make identity feel native again
- whether
- Implementation notes:
- tie this work back to the broader
History / Memory Layer - capture whether the first useful slice is recognition-only, rename-only, or full enrollment support
- tie this work back to the broader
16. Onboarding, Loop Management, And Fresh Start
- Status:
discovery - Tags:
protocol,docs - Why later: stock Jibo onboarding and household management were app-driven, and a hosted OpenJibo path will need a replacement for adding/removing people and setting ownership cleanly.
- Current evidence:
@be/first-contact,@be/introductions,@be/tutorial, and@be/restoreall exist in the stock skill inventory@be/who-am-iand@be/chitchatboth referencejibo.kb.loop, loop owner, and loop members@be/restoreand@be/settingsshow explicit wipe / restore / reboot behavior, which suggests there is a meaningful "fresh start" lifecycle to support
- Questions to answer:
- how a new owner or household should be provisioned without the original mobile app
- how to add, remove, and re-enroll loop members safely
- whether the right replacement is a lightweight web app, an operator-only admin flow, or both
- Implementation notes:
- include ownership transfer, fresh start, and post-restore re-onboarding in scope
- figure out what minimum loop-management UI or API a hosted OpenJibo v1 needs
17. Stop Command
- Status:
ready - Tags:
protocol - Why later: Jibo can be interrupted by any command, but it would be nice to have a dedicated "stop" type of command.
- Current evidence:
@be/idleexists in the stock skill inventory, so there is at least a natural local resting target
- Questions to answer:
- Can we find in the original source evidence for this skill or stop word phrase?
Support Tracks
18. Hosted Capture And Storage Plan
- Status:
ready - Tags:
docs - Why now: repo-local zip bundles are fine for solo testing but not for group rollout.
- Implementation notes:
- define a clean boundary between local capture sinks and hosted archival/export
- document how group testers should submit sessions without touching repo paths directly
19. STT Upgrade And Noise Screening
- Status:
ready - Tags:
stt - Why now: feature work is moving again, but missed short replies still block otherwise-correct flows.
- Current evidence:
- local buffered STT still fails on some turns with
ffmpeg/whisper.cppissues - low-energy or background-noise turns are still being sent down paths that should probably short-circuit earlier
- local buffered STT still fails on some turns with
- Implementation notes:
- evaluate lightweight waveform or energy gating before transcription
- compare a managed STT provider against the current local toolchain
Suggested Order Of Execution
- Radio resume and genre launch
- ESML apostrophe fix
- Backup / OTA yes-no reliability
- Proactive share / offer yes-no reliability
- News
- Clock family
- Photo family
- Update, backup, and restore proof
- Weather
- Proactivity selector and surprise offers
- Surprises
- History / memory layer
- Lasso / knowledge and event aggregation
- Personal report, calendar, and commute
- Who Am I / identity management
- Onboarding / loop management / fresh start
- Hosted capture/storage and STT improvements as parallel tracks