Commit Graph

6 Commits

Author SHA1 Message Date
alf 7861abd734 docs(voice): bandeaux migration OmniVoice sur les specs voix
- VOICE_DEPLOYMENT_SPEC : bandeau de substitution .cvps→.ovsp, cosyvoice/→omnivoice/voices/,
  GGUF→OVSP (modèle d'exclusivité §3-4 inchangé, non touché).
- VOICE_ENROLLMENT_SPEC : marqué SUPERSEDED → OmniVoice (make_ovsp + migration doc).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 10:17:54 +02:00
Kazeia 46343c9ad5 docs(voice): texte d'enrôlement = phrase de consentement connue + exclusivité dure
- VOICE_ENROLLMENT_SPEC : le texte de référence est CONNU (phrase de consentement
  admin), pas à transcrire → Whisper sort du chemin critique (fallback legacy).
  Fenêtre CV_TARGET_S 15→22s pour que consentement + fin riche entrent dans le .cvps.
- VOICE_DEPLOYMENT_SPEC §4 : exclusivité DURE (consentement/RGPD), capturée
  record-time (scope+owner au manifeste). Gap acté : ingérer depuis le stockage
  ADMIN (pas le provider /voices). Phase 2 = garde-fou on-device. Récap des états.
- enroll.py : CV_TARGET_S=22.0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 08:52:37 +02:00
alf 0eb1fd12bc docs: VOICE_DEPLOYMENT_SPEC §4 — exclusivité via Profile.voiceId, suppression sidecar .owner
L'exclusivité s'appuie sur le mapping voix↔profil EXISTANT, pas un artefact parallèle :
l'app joue toujours activeProfile.voiceId (playback déjà exclusif par profil). Central =
autorité d'assignation (verrouiller = assigner Profile.voiceId au propriétaire, jamais
ailleurs + déploiement ciblé). Aucun code app requis (garde-fou picker optionnel sans fichier).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 20:24:52 +02:00
alf 0924174c7b docs: VOICE_DEPLOYMENT_SPEC §4 requis — multi-patients/tablette → exclusivité on-device
Décidé : une tablette héberge plusieurs profils patients. La localisation du .cvps ne
suffit pas → mécanisme sidecar cosyvoice/<id>.owner (profileId, absent=généraliste)
poussé par Kazeia-central ; app lit le sidecar, expose owner_profile_id à /voices,
filtre le picker, repli runtime sur DEFAULT_VOICE_ID si profil non-propriétaire.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 20:21:34 +02:00
alf 342966e867 docs: clarifie VOICE_DEPLOYMENT_SPEC §1 — /voices scanne WAV (à convertir) + cvps (prête)
Recadrage suite échange : pas un blocage fonctionnel ; c'est l'inventaire voulu
(distinguer voix à convertir vs prêtes, garder les prêtes visibles après suppression WAV).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 20:17:43 +02:00
alf 94f8dc0993 docs: VOICE_DEPLOYMENT_SPEC — adaptations app patiente pour déploiement .cvps
Spec livrée au dev kazeia-android (stack figée §11) :
- BLOQUANT : /voices doit inclure cosyvoice/*.cvps (cvps_exists, state=ready, ids∪cvps)
  — sinon une voix dont le WAV est supprimé (workflow voulu) DISPARAÎT de l'inventaire.
- voices_reload (rescan + ACTION_RELOAD_VOICES) après push direct.
- conditionnel : exclusivité on-device si tablettes multi-patients (sinon la règle de
  déploiement côté central suffit en mono-patient/tablette).
Fondé sur le code réel (voicesCursor blind aux .cvps, résolution par nom de fichier,
pas de notion de propriété).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 18:40:50 +02:00