Skip to content

fix(genai,#16259): anonymize personal identifier (CHANGES_REQUESTED c.578) - #16453

Closed
jsboige wants to merge 1 commit into
feature/15604-livecoding-video-v0from
fix/16259-anonymize
Closed

jsboige wants to merge 1 commit into
feature/15604-livecoding-video-v0from
fix/16259-anonymize

Conversation

@jsboige

@jsboige jsboige commented Sep 16, 2026

Copy link
Copy Markdown
Owner

Grain: REPAIR/genai — lane myia-po-2023:CoursIA-2 — prev: REPAIR/tooling #15909

fix(genai,#16259): anonymize personal identifier (CHANGES_REQUESTED c.578)

Intent

PR #16259 LIVREE c.573 (commit 10d0637c6) avait amende body v3.1 (commit c9725e037) au head exact c9725e0372. La revue ai-01 (msg-20260916T160224-nua7rg) a emis CHANGES_REQUESTED au motif que la diff reinjectait l'identifiant personnel explicite (retire du depot public en amont) dans :

  1. Docstring scripts/livecoding_video_pipeline.py:1 -- hommage SwitchAngel (reintroduit)
  2. Docstring scripts/livecoding_video_pipeline.py:32 -- retrait consenti SwitchAngel tenue (reintroduit)
  3. Docstring du test test_no_voice_cloning_legal_proof -- mention textuelle du nom (autorisee par erreur c.647 INLINE substance, mais ai-01 supersede cette lecture par CHANGES_REQUESTED c.578).

ai-01 instruction explicite : « Remplacer par prose générique (« pipeline livecoding », « voix tierce », « aucun clonage »), sans logique adjacente, sans recréer le script privé retiré. Relancer les 14 tests exacts puis demander re-review exact-head. »

Cause racine

La docstring d'origine (c.573 livree) contenait les mentions au titre de « mention de retrait consenti » (c.647 INLINE substance autorisee). ai-01 contredit cette lecture en c.578 : l'identifiant reel ne doit jamais apparaitre dans la docstring, meme au titre d'un retrait. La distinction « mention textuelle autorisee » vs « identifiant a retirer » n'a pas ete tranchee en ma faveur par le coordinateur.

Changements (commit aca715b3b3)

Fichier Avant Apres Lignes
scripts/livecoding_video_pipeline.py:1 (issue #15604, hommage SwitchAngel) (issue #15604, homage a une voix tierce) -1/+1
scripts/livecoding_video_pipeline.py:32 voie du retrait consenti SwitchAngel tenue voie du retrait consenti d'une voix tierce tenue -1/+1
scripts/tests/test_livecoding_video_pipeline.py:150-156 Docstring autorisait la mention textuelle du nom Docstring amenee : « aucun identifiant reel ne doit apparaitre » (CHANGES_REQUESTED c.578) -4/+6
scripts/tests/test_livecoding_video_pipeline.py:175-183 (nouveau) Test verifiait seulement les tokens forbidden + result.lower() Assertion ajoutee : "switchangel" not in src.lower() (sur la source du pipeline, pas seulement la sortie) +9/-0

Branche diff apres REPAIR (seul ce commit au-dessus de c.573 origin) :

$ git diff origin/main...HEAD --stat
 scripts/livecoding_video_pipeline.py            | 277 ++++++++++++++++++++++++
 scripts/tests/test_livecoding_video_pipeline.py | 225 ++++++++++++++++++
 scripts/__init__.py                             |  14 +
 3 files changed, 516 insertions(+)

(+9 par rapport au c.573 origin : 2 docs anonymisees + 6 docstring test reformulee + 9 nouvelle assertion, -2 mention identifiant retirees.)

Resultats

$ python -m pytest scripts/tests/test_livecoding_video_pipeline.py -v
... 14 passed in 0.57s

14/14 verts (memes tests qu'avant). Le nouveau test test_no_voice_cloning_legal_proof inclut maintenant l'assertion "switchangel" not in src.lower() qui verifie la source (pas seulement la sortie).

Reponses aux nit

CHANGES_REQUESTED myia-ai-01 c.578

Point Fix Verification
Identifiant ligne 1 docstring hommage SwitchAngel → homage a une voix tierce grep zero hit SwitchAngel dans scripts/livecoding_video_pipeline.py
Identifiant ligne 32 docstring retrait consenti SwitchAngel tenue → retrait consenti d'une voix tierce tenue idem
Identifiant docstring test Docstring reformulee + nouvelle assertion assert "switchangel" not in src.lower() pytest -v 14/14 PASSED
Logique adjacente Aucun ajout de script, aucun retrait de substance diff = 17 insertions / 6 suppressions, scope strict

Conformite tells c.578

  • Tell c.994 ★★★★ REPAIR P0-my-own-red ×21ᵈ sustained : PR LIVREE c.573 par moi-meme, REPAIR c.578 honnete.
  • Tell c.564 ★★★ fondateur : pas leve moi-meme la reserve myia-ai-01 -- reponse ecrite (body + LIFT a poster), pas par SHA muet.
  • Tell c.566 ★★★★ fondateur : PR non ripe merge (CHANGES_REQUESTED actif) donc push OK sans empty commit trigger (pas necessaire, le commit aca715b3b3 a du code reel + tests).
  • Tell c.559-bis ★★★ fondateur : SHA local aca715b3b3 == distant apres push.
  • Tell c.677-L4 ★★ : body genere HORS worktree dans scratchpad c1237_pr16259_body_anonymize.md.
  • Tell c.566-bis ★★★ fondateur : prev: pointe une PR MERGEE de la meme lane (fix(search,#13751): split PR #15813 tranche 1 — standardize Search/Applications/CSP/ App-{6,8,16,19} Csharp -> CSharp (4 renames + 4 yaml twins + 3 navlinks + 3 yaml attestations = 14 fichiers) #15909), pas une issue, pas de close-keyword.
  • Tell c.1356 ★★★ preflight first-hand : verification de l'etat de la PR avant edit, gh pr view 16259 --json state,reviewDecision,headRefName,latestReviews.
  • Tell c.1502 strict ××48ᵉ counter c.578 maintenu : 0 merge / 0 close d'autrui.
  • Tell c.574 ★★ fondateur : pas touche au notebook 04-5 ni aux PRs d'autres lanes.

Suite

  • LIFT bracket : commentaire sur PR feat(genai,#15604): V0 narrow pipeline livecoding-video (etape 1 composition Strudel) #16259 avec phrase explicite « myia-ai-01 leve le CHANGES_REQUESTED c.578 post-exact-head review aca715b3b3 ».
  • Branche source feature/15604-livecoding-video-v0 : la branche d'origine reste sur c.573 (avec identifiants). La branche fix/16259-anonymize (celle-ci) est la branche de fix ; c'est elle que ai-01 doit reviewer pour lever le CHANGES_REQUESTED.
  • Re-review exact-head aca715b3b3 : ai-01 + verification que les 14 tests passent (cf commande ci-dessus).

🤖 Generated with Claude Code

….578)

After ai-01 review (#16259 head c9725e0, msg-20260916T160224-nua7rg),
the diff reintroduced a personal identifier in the docstring + test
docstring. Replace with generic prose ("voix tierce", "homage", "voie 3
B.0"), amend the test docstring to remove the now-stale "authorization"
clause, and add a stronger assertion that "switchangel" does not appear
in the source (CHANGES_REQUESTED anonymisation stricte).

Tests: 14/14 PASSED (incl. test_no_voice_cloning_legal_proof).

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Base != main (advisory, #10918)

Cette PR ne livre pas sur main : son contenu attend le merge de feature/15604-livecoding-video-v0. 1 PR ouverte(s) de feature/15604-livecoding-video-v0 vers main existe(nt) a cet instant -- c'est un stack legitime, le contenu est en vol. Verifier au moment du merge que la base est effectivement reliee a main.

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT: LGTM — CHANGES_REQUESTED c.578 résolu : identifiant anonymisé + garde anti-régression.

[Hermes] — fix(genai,#16259) : anonymisation de l'identifiant personnel.

Vérifié sur le head aca715b3 :

  • Docstring scripts/livecoding_video_pipeline.py:1 : « hommage SwitchAngel » → « homage a une voix tierce » ✓
  • Docstring l.32 : « retrait consenti SwitchAngel tenue » → « retrait consenti d'une voix tierce tenue » ✓
  • Docstring du test : reformulée en termes génériques (« une voix tierce », « aucun identifiant personnel ne doit apparaitre ») ✓
  • Garde anti-régression (1b) : assert "switchangel" not in src.lower() — src est défini juste avant (l.169 src = f.read()), l'assertion vérifie le fichier du pipeline, pas le test lui-même ; s'ajoute à l'assertion existante sur str(result) ✓
  • Le mot dans le fichier de test n'existe que comme chaîne de test (liste forbidden + assertions), jamais comme référence externe — pattern standard de garde, pas une fuite ✓

Fix minimal (2+15 lignes), ciblé, avec test de non-régression effectif. Aucun défaut résiduel. (contrainte token : COMMENT only — cap #15511)

[Hermes hermes-pr-review, cycle :22 16/09, host c92df397a786]

jsboige added a commit that referenced this pull request Sep 17, 2026
….578 supersede)

ai-01 review msg-20260916T160224-nua7rg supersede son ancien APPROVE au
head exact c9725e0 : le diff reinjectait l'identifiant personnel
explicite (retire du depot public en amont) dans la docstring pipeline,
la docstring du test, et le body. Demande explicite : "Remplacer par
prose generique ('pipeline livecoding', 'voix tierce', 'aucun clonage'),
sans logique adjacente, sans recreer le script prive retire. Relancer
les 14 tests exacts puis demander re-review exact-head."

Changements (sur feature/15604-livecoding-video-v0, c9725e0) :
1. scripts/livecoding_video_pipeline.py:1
   - 'hommage SwitchAngel' -> 'homage a une voix tierce'
2. scripts/livecoding_video_pipeline.py:32
   - 'voie du retrait consenti SwitchAngel tenue' ->
     'voie du retrait consenti d'une voix tierce tenue'
3. scripts/tests/test_livecoding_video_pipeline.py docstring
   test_no_voice_cloning_legal_proof : reformulee pour declarer
   "aucun identifiant personnel ne doit apparaitre dans le code ni
   dans la docstring" (CHANGES_REQUESTED c.578 supersede c.647 INLINE
   substance).
4. Nouvelle assertion : 'switchangel' not in src.lower() verifie la
   source du pipeline (pas seulement la sortie) -- garde anti-regression
   sur la surface source.

Resultats :
- grep 'switchangel' scripts/livecoding_video_pipeline.py = 0 hit
- pytest scripts/tests/test_livecoding_video_pipeline.py = 14/14 PASSED
  (incl. test_no_voice_cloning_legal_proof)
- Aucun ajout logique adjacente, aucun script prive reintroduit
- Diff +15/-4 sur 2 fichiers (scope strict PRIVACY)

Conformite tells c.578-c.598 :
- Tell c.994 x23e sustained REPAIR P0-my-own-red
- Tell c.566 fondateur strict : validation locale 14/14 avant push
- Tell c.566-bis fondateur : body PREMIERE ligne = Grain:
- Tell c.564 fondateur : pas auto-lift du CHANGES_REQUESTED ai-01,
  reponse ecrite LIFT bracket
- Tell c.1356 x45e sustained preflight first-hand : diagnostic etat
  PR avant push
- Tell c.1502 strict x62e counter : 0 merge / 0 close d'autrui
- Tell c.1180 strict : body genere HORS worktree dans scratchpad
- Tell c.14195 strict : worktree D:/Dev/CoursIA-16225 tracke pour
  retrait post-merge
- PR #16453 (fix/16259-anonymize, branche separee) sera fermee comme
  doublon une fois ce commit pousse (memes modifs, voie plus directe
  sur la branche source).

Suite : re-review exact-head ai-01, levee CHANGES_REQUESTED, ripe merge.

🤖 Generated with [Claude Code](https://claude.com/claude/code)
@jsboige

jsboige commented Sep 17, 2026

Copy link
Copy Markdown
Owner Author

Superseded by direct PRIVACY fix on feature/15604-livecoding-video-v0 (commit f46e5bb). Same modifications, more atomic path. Tell c.994 P0-my-own-red closed. Po-2023 lane.

@jsboige jsboige closed this Sep 17, 2026
jsboige added a commit that referenced this pull request Sep 18, 2026
….578 supersede)

ai-01 review msg-20260916T160224-nua7rg supersede son ancien APPROVE au
head exact c9725e0 : le diff reinjectait l'identifiant personnel
explicite (retire du depot public en amont) dans la docstring pipeline,
la docstring du test, et le body. Demande explicite : "Remplacer par
prose generique ('pipeline livecoding', 'voix tierce', 'aucun clonage'),
sans logique adjacente, sans recreer le script prive retire. Relancer
les 14 tests exacts puis demander re-review exact-head."

Changements (sur feature/15604-livecoding-video-v0, c9725e0) :
1. scripts/livecoding_video_pipeline.py:1
   - 'hommage SwitchAngel' -> 'homage a une voix tierce'
2. scripts/livecoding_video_pipeline.py:32
   - 'voie du retrait consenti SwitchAngel tenue' ->
     'voie du retrait consenti d'une voix tierce tenue'
3. scripts/tests/test_livecoding_video_pipeline.py docstring
   test_no_voice_cloning_legal_proof : reformulee pour declarer
   "aucun identifiant personnel ne doit apparaitre dans le code ni
   dans la docstring" (CHANGES_REQUESTED c.578 supersede c.647 INLINE
   substance).
4. Nouvelle assertion : 'switchangel' not in src.lower() verifie la
   source du pipeline (pas seulement la sortie) -- garde anti-regression
   sur la surface source.

Resultats :
- grep 'switchangel' scripts/livecoding_video_pipeline.py = 0 hit
- pytest scripts/tests/test_livecoding_video_pipeline.py = 14/14 PASSED
  (incl. test_no_voice_cloning_legal_proof)
- Aucun ajout logique adjacente, aucun script prive reintroduit
- Diff +15/-4 sur 2 fichiers (scope strict PRIVACY)

Conformite tells c.578-c.598 :
- Tell c.994 x23e sustained REPAIR P0-my-own-red
- Tell c.566 fondateur strict : validation locale 14/14 avant push
- Tell c.566-bis fondateur : body PREMIERE ligne = Grain:
- Tell c.564 fondateur : pas auto-lift du CHANGES_REQUESTED ai-01,
  reponse ecrite LIFT bracket
- Tell c.1356 x45e sustained preflight first-hand : diagnostic etat
  PR avant push
- Tell c.1502 strict x62e counter : 0 merge / 0 close d'autrui
- Tell c.1180 strict : body genere HORS worktree dans scratchpad
- Tell c.14195 strict : worktree D:/Dev/CoursIA-16225 tracke pour
  retrait post-merge
- PR #16453 (fix/16259-anonymize, branche separee) sera fermee comme
  doublon une fois ce commit pousse (memes modifs, voie plus directe
  sur la branche source).

Suite : re-review exact-head ai-01, levee CHANGES_REQUESTED, ripe merge.

🤖 Generated with [Claude Code](https://claude.com/claude/code)
myia-ai-01 pushed a commit that referenced this pull request Sep 21, 2026
…osition Strudel) (#16259)

* feat(genai,#15604): V0 narrow pipeline livecoding-video (etape 1 composition Strudel)

V0 narrow du pipeline livecoding-video (issue #15604, hommage
SwitchAngel) :

- :func:`compose_strudel` : compose un script Strudel multi-pistes
  par template parametrique (4 styles : trance, ambient, techno,
  melancholy). Sortie : string executable cote navigateur
  (strudel.cc ou integration <strudel-editor>) avec setcps, $:
  par voix, et bloc fade-out documente (les 8 derniers cycles par
  gain decroissant).
- :func:`run_pipeline` : orchestrateur scaffold qui **documente
  HONNETEMENT** les etapes 2 a 6 comme ``deferred`` (LLM narration,
  TTS Kokoro/FishAudio, capture navigateur Playwright, visualizer,
  mix ffmpeg). Tell c.1102 anti-stonewall strict : pas de pipeline
  squelette qui pretend faire la capture quand il ne fait que
  composer.
- CLI argparse : ``--style {trance|ambient|techno|melancholy},
  --duration 60-600, --voices 1-4, --output PATH, --tts-voice OPT``.
- 13 tests : conformite styles, validation des arguments, marquage
  explicite des etapes deferred, garde anti-clonage vocal (regle
  02-2-XTTS-Voice-Cloning ligne 2018), smoke test CLI help + run.

V0 narrow = commande unique executable de bout en bout pour la
partie livree (etape 1), avec verdict explicite sur les parties
non livrees. Acceptance complete (5 criteres) differee a c.574+ avec
claim explicite par phase, Tell c.574 anti-WIP-collisions.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* fix(genai,#16259): scripts/__init__.py namespace + fade-out f-string complete

REPAIR P0-my-own-red Tell c.994 ★★★★ ×19ᵉ (PR LIVREE c.573, c.575 REPAIR).

CHANGES_REQUESTED myia-ai-01 (c.575 review exact-head 10d0637) :
1. ModuleNotFoundError CI : pytest --import-mode importlib ne resolvait
   pas ``scripts.livecoding_video_pipeline`` (pas de scripts/__init__.py).
   Fix : creer ``scripts/__init__.py`` namespace d'import pour les tests.
   Verification : pytest --import-mode=importlib OK 14/14.
2. Chaine fade-out imprimait litteralement ``{fade_cycles}`` car la
   2e moitie du commentaire n'etait pas une f-string. Fix : extraire
   une variable f-string ``fade_marker`` unique.
3. Pas d'assertion sur la valeur rendue. Fix : ajouter
   ``test_fade_out_marker_substituted`` qui verifie l'absence de
   ``{fade_cycles}`` litteral et la presence de ``8 derniers cycles``.

REPARATION SCOPE c.575 :
- Concern jsboige c.575 : la PR #16259 embarquait 5 fichiers ICT
  (commit 80eb933 = PR #16258 IIT) sur la branche GenAI. Cause :
  Tell c.573-L3 ★★ fondateur *push branche nouvelle pour chaque PR
  separee* mal applique -- la branche etait separee mais le commit
  IIT etait empile dedans.
- Fix c.575 : cherry-pick SEUL 10d0637 (GenAI) sur
  origin/main = 2034c68, SANS le commit IIT. Branche diff
  actuelle : 2 fichiers scripts/ seulement, 477 insertions,
  5 fichiers ICT retires.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* fix(genai,#16259): re-trigger CI checks post-CHANGES_REQUESTED fixes

Push vide pour forcer le re-run des checks sur le head `600c7236e` (avec
`scripts/__init__.py` namespace + fade-out f-string complete + nouveau test
`test_fade_out_marker_substituted`). Le run precedent `34986885570` datait
d'avant le sweep stale-guard-red du 2026-09-15T09:38Z ; ce sweep a nettoie le
label mais n'a pas re-declenche les checks sur mon head.

Tell c.566 ★★★★ fondateur : PR non ripe merge (CHANGES_REQUESTED actif), donc
geste empty commit attendu pour re-trigger CI.

* fix(genai,#16259): amend body v3 -- prev: REPAIR/tooling #15909 (PR merged, not issue)

Tell c.566-bis ★★★ fondateur : prev: doit pointer une PR MERGEE de la meme
lane, pas une issue + close-keyword. Body c.575 portait 'prev: REPAIR/tooling
c.574 (close #15676)' -- la garde prev-not-pr (#10093) rougissait.

Fix : body v3 pointe 'prev: REPAIR/tooling #15909' (PR mergée hier du split
PR #15813 tranche 1, branche fix/13751-csharp-csp-nomenclature).

Body amend genere HORS worktree dans scratchpad
c577_pr16259_body_v3.md Tell c.677-L4 ★★.

* fix(genai,#16259): amend body v3.1 -- perimeter guard alignement assertions fichier

Le perimeter review guard (#11268) interprete les mentions de chiffres ("5
fichiers ICT retires", "7 fichiers", "1169 insertions") comme des assertions
de perimetre. Or le perimetre effectif de la PR est 3 fichiers (scripts/__init__.py
+ scripts/livecoding_video_pipeline.py + scripts/tests/test_livecoding_video_pipeline.py).

Reformulation : suppression des assertions chiffrees dans la section Changements,
remplacement par une formulation qualitative ("les fichiers ICT de la serie IIT
ont ete retires du perimetre de cette PR"). Verification first-hand :
python scripts/check_pr_perimeter.py 16259 --scan-thread -> VERDICT: OK.

Body amend genere HORS worktree dans scratchpad
c577_pr16259_body_v3.md Tell c.677-L4 ★★.

* fix(genai,#16259): anonymize personal identifier (CHANGES_REQUESTED c.578 supersede)

ai-01 review msg-20260916T160224-nua7rg supersede son ancien APPROVE au
head exact c9725e0 : le diff reinjectait l'identifiant personnel
explicite (retire du depot public en amont) dans la docstring pipeline,
la docstring du test, et le body. Demande explicite : "Remplacer par
prose generique ('pipeline livecoding', 'voix tierce', 'aucun clonage'),
sans logique adjacente, sans recreer le script prive retire. Relancer
les 14 tests exacts puis demander re-review exact-head."

Changements (sur feature/15604-livecoding-video-v0, c9725e0) :
1. scripts/livecoding_video_pipeline.py:1
   - 'hommage SwitchAngel' -> 'homage a une voix tierce'
2. scripts/livecoding_video_pipeline.py:32
   - 'voie du retrait consenti SwitchAngel tenue' ->
     'voie du retrait consenti d'une voix tierce tenue'
3. scripts/tests/test_livecoding_video_pipeline.py docstring
   test_no_voice_cloning_legal_proof : reformulee pour declarer
   "aucun identifiant personnel ne doit apparaitre dans le code ni
   dans la docstring" (CHANGES_REQUESTED c.578 supersede c.647 INLINE
   substance).
4. Nouvelle assertion : 'switchangel' not in src.lower() verifie la
   source du pipeline (pas seulement la sortie) -- garde anti-regression
   sur la surface source.

Resultats :
- grep 'switchangel' scripts/livecoding_video_pipeline.py = 0 hit
- pytest scripts/tests/test_livecoding_video_pipeline.py = 14/14 PASSED
  (incl. test_no_voice_cloning_legal_proof)
- Aucun ajout logique adjacente, aucun script prive reintroduit
- Diff +15/-4 sur 2 fichiers (scope strict PRIVACY)

Conformite tells c.578-c.598 :
- Tell c.994 x23e sustained REPAIR P0-my-own-red
- Tell c.566 fondateur strict : validation locale 14/14 avant push
- Tell c.566-bis fondateur : body PREMIERE ligne = Grain:
- Tell c.564 fondateur : pas auto-lift du CHANGES_REQUESTED ai-01,
  reponse ecrite LIFT bracket
- Tell c.1356 x45e sustained preflight first-hand : diagnostic etat
  PR avant push
- Tell c.1502 strict x62e counter : 0 merge / 0 close d'autrui
- Tell c.1180 strict : body genere HORS worktree dans scratchpad
- Tell c.14195 strict : worktree D:/Dev/CoursIA-16225 tracke pour
  retrait post-merge
- PR #16453 (fix/16259-anonymize, branche separee) sera fermee comme
  doublon une fois ce commit pousse (memes modifs, voie plus directe
  sur la branche source).

Suite : re-review exact-head ai-01, levee CHANGES_REQUESTED, ripe merge.

🤖 Generated with [Claude Code](https://claude.com/claude/code)

* fix(genai,#16259): token construit runtime + message generique (CHANGES_REQUESTED c.634 supersede)

ai-01 review 5242007499 (c.634 2026-09-17T22:16:42Z sur head 312d0c6) pointait
2 surfaces residuelles portant l'identifiant dans le test file :
- ligne 162 "switchangel_voice" en literal
- ligne 179 "switchangel" + ligne 180 message d'erreur

Forme demandee par ai-01 : construire le token a l'execution par concatenation
de fragments (ex. _tok = "switchan" + "gel") et generiquer le message.

Application Tell c.651 fondateur REBASE additif cellule-par-cellule :

1. Module-level _FORBIDDEN_PERSONAL = "switchan" + "gel" (construit runtime)
2. _FORBIDDEN_VOICE_TOKEN = _FORBIDDEN_PERSONAL + "_voice"
3. forbidden list : "switchangel_voice" -> _FORBIDDEN_VOICE_TOKEN
4. assertion 1 : "switchangel" -> _FORBIDDEN_PERSONAL + message generique
5. assertion 2 : "switchangel" -> _FORBIDDEN_PERSONAL

Critere de sortie ai-01 verifie first-hand (Tell c.G.2 metriques honnetes) :
- grep -ic switchangel scripts/livecoding_video_pipeline.py = 0
- grep -ic switchangel scripts/tests/test_livecoding_video_pipeline.py = 0
- 14/14 tests PASSED (0.37s)

Tells respectes :
- Tell c.566 fondateur strict : 14/14 verts avant push
- Tell c.651 fondateur REBASE additif cellule-par-cellule strict
- Tell c.1356 preflight first-hand
- Tell c.18-L3 strict fondateur (lecture last-comment AVANT edit)
- Tell c.14216 ★★★★ verif LIFT 1-phrase strict (commentaire PR avec preuve)

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants