Run the first real `Jibo -> .NET OpenJibo cloud` test on the Ubuntu machine using the same working certificate and controlled routing that currently work with the Node server.
This runbook intentionally avoids introducing Azure, new hostnames, or new robot bootstrap changes during the first live test.
## Recommended Approach
Use the existing Ubuntu networking path and certificate material first.
- keep the current controlled Wi-Fi / routing arrangement
- keep the current Jibo-facing hostnames:
-`api.jibo.com`
-`api-socket.jibo.com`
-`neo-hub.jibo.com`
- keep the Node server available as a fallback
- run the `.NET` API with the same cert/key material by converting it to a temporary `.pfx` for Kestrel
## Prerequisites On Ubuntu
Install or confirm these tools:
-`dotnet`
-`openssl`
-`curl`
-`python3`
Optional but useful:
-`pwsh`
`pwsh` is not required anymore for the Ubuntu live test path if you use the bash/python helpers added here.
## Certificate Plan
The Node server currently uses:
-`cert.pem`
-`key.pem`
The `.NET` API can reuse that same material for the test by converting it at startup into a temporary `.pfx`.
If your current cert file already includes the working chain, use it as-is.
If your chain is separate, pass it as `CHAIN_PEM`.
## Step By Step
1. On Ubuntu, stop the Node server if it is currently bound to port `443`.
2. From the repo root, start the `.NET` cloud using the same cert/key:
The most recent live round showed that startup and some Q-and-A paths are progressing, but audio-turn reliability is still uneven.
Carry these expectations into the next run:
- constrained yes/no replies should be tested intentionally because they need special handling and are easy to miss if STT drifts
- phrases intended to trigger known skills should be repeated using a small, documented wording set so we can separate routing issues from Whisper errors
- provider-backed placeholder answers are still expected for weather, commute, calendar, news, and similar routes unless that feature path is explicitly implemented
For STT during live testing:
- prefer runs where `audioTranscriptHint` or other synthetic replay cues are available
- do not assume local `whisper.cpp` success means the audio pipeline is stable overall
- if many turns stay pending or `ffmpeg` rejects normalized Ogg files, treat that as a speech-pipeline issue first, not an intent-mapping issue
- keep the Node server available as the comparison path for yes/no and audio-preprocessing behavior