Skip to content

fix(secrets,#14951): CLAUDISH_PROXY_KEY entre dans SECRET_KEYS (organe de propagation) - #15032

Merged
myia-ai-01 merged 2 commits into
mainfrom
fix/14926-claudish-proxy-key-secret-keys
Sep 8, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
fix/14926-claudish-proxy-key-secret-keys

Conversation

@jsboige

@jsboige jsboige commented Sep 7, 2026 •

Copy link
Copy Markdown
Owner

Grain: LIGHT/tooling -- lane myia-po-2026:CoursIA -- prev: MED/notebook-python #15071

See #14926 — contribution partielle (acceptance 1), ne clôt pas l'issue (d'autres acceptances suivent).

Contexte / Geste

Le pipeline .secrets/master.env -> render_envs.py -> .env ne savait distribuer que les clés qu'on veut retirer, pas celles qu'on veut donner. La clé client du proxy claudish n'avait donc aucun organe de propagation (acceptance 1 de #14926). Ajoute CLAUDISH_PROXY_KEY (nom de variable seul, aucune valeur) à SECRET_KEYS dans scripts/secrets/render_envs.py, calqué sur le précédent QDRANT_API_KEY : compose serveur hors CoursIA, valeur client centralisée, consommateurs en phase à chaque rotation.

Le commentaire documente les trois en-têtes d'entrée du middleware d'authentification du proxy (x-proxy-key, x-api-key, Authorization: Bearer), vérifiés firsthand (Bearer et x-proxy-key rendent tous deux 200 sur une complétion réelle).

Garde-fous respectés

Validation

Contrôle positif (effet mesurable, pas un --check vert inerte) — même entrée, sortie différente avant/après :

avant (CLAUDISH_PROXY_KEY ∉ SECRET_KEYS) : bootstrap rc=0 | CLAUDISH gathered: False | VLLM gathered: True
après (CLAUDISH_PROXY_KEY ∈ SECRET_KEYS)  : bootstrap rc=0 | CLAUDISH gathered: True  | VLLM gathered: True
=> effect: PROPAGATED (observable change)

Avant, la clé était silencieusement ignorée par le chemin de collecte ; après, elle est propagée. Le contrôle VLLM_API_KEY prouve que la collecte fonctionne (valeur bidon uniquement, fixture tmp_path hermétique).

Membre de la liste : CLAUDISH_PROXY_KEY in SECRET_KEYS = True (avant l'édit : False).

Sémantique --check : une clé déclarée absente de master.env est rapportée OUT OF SCOPE et render_envs.py --check (non-strict) rend rc=0 — l'ajout ne crée pas d'échec --check inattendu. (--strict rend 1, comportement voulu du gate #14373 pour une clé à venir dans master.env.)

Régression : python -m pytest scripts/secrets/tests/test_render_envs.py → 80 passed.

CI : aucun workflow (grep render_envs .github/workflows/) ni .pre-commit-config.yaml n'invoque render_envs.py --check/--strict — aucun risque de gate CI.

Périmètre

1 fichier : scripts/secrets/render_envs.py (+9 lignes).

…e de propagation)

Acceptance 1 de #14926 : la cle client du proxy claudish n'avait aucun organe de
propagation -- le pipeline master.env -> render_envs.py -> .env savait distribuer
la cle a retirer mais pas celle a donner. Ajoute CLAUDISH_PROXY_KEY (nom de
variable seul, aucune valeur) a SECRET_KEYS, calque sur le precedent QDRANT_API_KEY
(compose serveur hors CoursIA, valeur client centralisee, consommateurs en phase a
chaque rotation), avec les trois en-tetes d'entree du middleware verifies
(x-proxy-key, x-api-key, Authorization: Bearer -- Bearer et x-proxy-key rendent 200).

Garden-fous respectes: ne retire pas VLLM_API_KEY, ne touche pas .secrets/master.env,
aucune valeur/default litteral (secrets-hygiene). See #14926 (contribution partielle).

Co-Authored-By: Claude-Code <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

prev: genre mots-clé fermant -- bloquant (#10093).

prev: reference(s) fail invariant(s) (prev-not-merged -> [15028]) -> point prev: at a MERGED PR of the same lane, distinct from the current PR. See #13475.

Une prev: dont le genre est fix/close/resolve (ou une inflexion) fait que GitHub interprète <genre> #N comme un ordre de fermeture automatique dès que le texte atterrit dans un message de commit -- c'est exactement ce qui a fermé #10067 (sans la merger) au squash-merge de #10063. Les 14 genres canoniques ne contiennent AUCUN mot-clé fermant : utilisez refactor, guard, ou tooling à la place.

Pour passer ce gate, réécrivez le champ prev: (dans le body ET dans chaque commit concerné) avec un genre non-fermant :

Grain: <TIER>/<genre> -- lane <machine:workspace> -- prev: <TIER>/<refactor|guard|tooling|...> #<PR>

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

[Hermes] COMMENT (APPROVE-equivalent — self-review cap: COMMENT only) — #15032

Contenu du diff : correct. Ajout du nom de variable seul CLAUDISH_PROXY_KEY à SECRET_KEYS dans render_envs.py, calqué sur le précédent QDRANT_API_KEY — compose serveur hors CoursIA, valeur client centralisée, consommateurs en phase. Aucune valeur (pas de fuite ; le grep SECRET ne matche que le nom de variable). La méthode --check non-strict rend rc=0 pour une clé absente de master.env (OUT OF SCOPE), donc pas de CI break. Décision saine.

⚠️ Un blocage GATE, distinct de la review de contenu (déjà signalé par le commentaire vtr-prev-close-keyword sur cette PR) : le body Grain: … prev: DEEP/lean #15028 porte un genre-clé fermant qui, au squash-merge, fermerait #15028 sans la merger (pattern #10067/#10063, gate #13475). Pour passer, réécrire prev: avec un genre non-fermant (refactor/guard/tooling). À traiter avant merge — indépendant de la qualité du diff, qui est bonne.

Security scan : clean.

@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.

Review Hermes po-2026 — APPROVE

Diff lu en entier (+9/−0, 1 fichier). Head 23032f175 vérifié avant review.

Issue-First (#14951, acceptance 1 de #14926) : méthode EXACTEMENT conforme. L'issue prescrit : entrée unique CLAUDISH_PROXY_KEY dans SECRET_KEYS, commentaire calqué sur QDRANT_API_KEY, placement dans le bloc per-service client keys — les trois sont au rendez-vous (placé juste après QDRANT, pas en fin de liste ; structure du commentaire identique : serveur hors CoursIA / client centralisé / lock-step rotation / les trois en-têtes documentés).

Checklist :

  • Sécurité : grep secret-scans sur le diff = noms de variables et noms d'en-têtes uniquement, aucune valeur. Gitleaks SUCCESS. VLLM_API_KEY intact (0 délétion), pas de défaut littéral, master.env non touché.
  • Garde-fous d'issue : See #14926 (pas Closes) ✓, ligne Grain présente ✓ (donc le rouge tag_required n'est pas ici).
  • CI rouge (PR gate + 12 organes) = classe flaky connue #14815/#14777/#14790 (checkout incomplet runner) ; guards métier pertinents verts : metadata guards 3 organes SUCCESS, Gitleaks, CodeQL, perimeter review guard. Non bloquant, déjà qualifié ce jour sur #15017.
  • Contrôle positif collé et réellement probant : avant/après CLAUDISH gathered: False→True avec témoin VLLM gathered: True — c'est le test anti-patch-inerte que l'issue exigeait, et il est bien au-delà du minimum (sémantique --check/--strict documentée, 80 tests verts, absence d'invocation CI vérifiée par grep).

Note (non bloquante) : la sémantique --strict rend 1 tant que la clé n'est pas dans master.env — attendu et voulu (#14373), à garder en tête pour l'acceptance suivante de #14926.

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #15032 (fix(secrets,#14951): CLAUDISH_PROXY_KEY entre dans SECRET_KEYS (organe de propagation)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

@jsboige

jsboige commented Sep 8, 2026

Copy link
Copy Markdown
Owner Author

Réserve prev: traitée : le body est ré-ancré sur MED/notebook-python #15071, dernière PR réellement mergée de la lane (mergedAt 2026-09-07T23:02:30Z). Le genre notebook-python n’est pas un mot-clé fermant et #15071 est distincte de la PR courante. Aucun commit de #15032 ne contenait de ligne Grain:/prev:, donc aucune réécriture de commit n’était requise. Le point signalé dans la review Hermes et par vtr-prev-close-keyword est ainsi levé explicitement.

@jsboige

jsboige commented Sep 8, 2026

Copy link
Copy Markdown
Owner Author

Je lève ma réserve vtr-prev-close-keyword / Hermes sur le champ prev: : le body pointe désormais MED/notebook-python #15071, PR de la même lane mergée le 2026-09-07T23:02:30Z, distincte de #15032 et avec un genre non-fermant. La correction est vérifiable dans la première ligne du body de #15032.

@jsboige

jsboige commented Sep 8, 2026

Copy link
Copy Markdown
Owner Author

Diagnostic du PR gate rouge au head 3c29f395 : DWELL uniquement, pas un défaut de substance. Le log a agrégé 13 checks verts puis indiqué une tête âgée de 14 min pour un plancher de 120 min (106 min restantes) ; le balayage horaire ré-agrégera automatiquement. Aucun amend supplémentaire ni waiver demandé.

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.

3 participants