diff --git a/shared/homepage/services.json b/shared/homepage/services.json index 616285c..fca56b0 100644 --- a/shared/homepage/services.json +++ b/shared/homepage/services.json @@ -541,12 +541,12 @@ "name": "frank-tts", "category": "admin", "section": "AI", - "description": "The fleet's cloned-voice speech endpoint: POST /v1/audio/speech with voice=, audio back in that voice. Public on 7772; the engine behind it (frank-tts-engine) is unpublished on purpose. Hidden until deployed.", + "description": "The fleet's cloned-voice speech endpoint: POST /v1/audio/speech with voice=, audio back in that voice. Published on 7772; the engine behind it (frank-tts-engine) is unpublished on purpose. It is also the harness speech role.", "url": "", "docs": "", "probe": "127.0.0.1:7772", "method": "http", - "wip": "down", + "wip": false, "showLink": false, "art": "/img/apps/mono-ft.svg" } diff --git a/tests/frank_tts_engine.bats b/tests/frank_tts_engine.bats index 4ce4153..8f795c1 100755 --- a/tests/frank_tts_engine.bats +++ b/tests/frank_tts_engine.bats @@ -943,10 +943,14 @@ DRV || { echo "editing app.py must rebuild the façade image"; false; } } -@test "the voice stack's homepage state: one card for the pair, and it is hidden while undeployed" { +@test "the voice stack's homepage state: one probed card for the pair, and no link" { # The engine is not on the homepage and must not be: it publishes no port, so # there is no address the checker could dial, and a card that can never be - # green is worse than no card. The façade carries the pair's signal. + # green is worse than no card. The façade carries the pair's signal — and + # since the 2026-10-18 deploy that signal is a real probe (`wip: false`), not + # a placeholder. It stays `showLink: false` and admin-only: an HTTP API has no + # page to open, and the checker counts ANY HTTP response as up, so the card is + # honest without a link and without a `/health` path in the probe. python3 - "$REPO_ROOT" <<'PY' import json, os, sys root = sys.argv[1] @@ -955,8 +959,12 @@ assert "frank-tts-engine" not in cards, \ "the engine publishes no port: a card for it could never be probed green" fts = cards["frank-tts"] assert fts["probe"] == "127.0.0.1:7772", fts["probe"] -assert fts["wip"] == "down" and fts["showLink"] is False, \ - "nothing listens on 7772 until the deploy, so a visible card reads as down forever" +assert fts["wip"] is False, \ + "the endpoint is deployed; a wip card would hide its real state: " + repr(fts.get("wip")) +assert fts["showLink"] is False and fts["url"] == "", \ + "an API endpoint has no UI to link to — it is a status card, not a tile" +assert fts["category"] == "admin", \ + "consumers dial this; it is not an app the user homepage should advertise" assert os.path.exists(f"{root}/shared/homepage{fts['art']}"), f"missing art {fts['art']}" PY }