docs(frank-tts): the voice stack is deployed — fix the six pages and the card that still deny it #17

Merged
dank merged 3 commits from docs/frank-tts-live into main 2026-10-18 19:25:38 -07:00
2 changed files with 14 additions and 6 deletions
Showing only changes of commit 5768680542 - Show all commits

No files matched your search

+2 -2
View File
@@ -541,12 +541,12 @@
"name": "frank-tts", "name": "frank-tts",
"category": "admin", "category": "admin",
"section": "AI", "section": "AI",
"description": "The fleet's cloned-voice speech endpoint: POST /v1/audio/speech with voice=<name>, 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=<name>, 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": "", "url": "",
"docs": "", "docs": "",
"probe": "127.0.0.1:7772", "probe": "127.0.0.1:7772",
"method": "http", "method": "http",
"wip": "down", "wip": false,
"showLink": false, "showLink": false,
"art": "/img/apps/mono-ft.svg" "art": "/img/apps/mono-ft.svg"
} }
+12 -4
View File
@@ -943,10 +943,14 @@ DRV
|| { echo "editing app.py must rebuild the façade image"; false; } || { 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 # 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 # 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' python3 - "$REPO_ROOT" <<'PY'
import json, os, sys import json, os, sys
root = sys.argv[1] 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" "the engine publishes no port: a card for it could never be probed green"
fts = cards["frank-tts"] fts = cards["frank-tts"]
assert fts["probe"] == "127.0.0.1:7772", fts["probe"] assert fts["probe"] == "127.0.0.1:7772", fts["probe"]
assert fts["wip"] == "down" and fts["showLink"] is False, \ assert fts["wip"] is False, \
"nothing listens on 7772 until the deploy, so a visible card reads as down forever" "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']}" assert os.path.exists(f"{root}/shared/homepage{fts['art']}"), f"missing art {fts['art']}"
PY PY
} }