Repository navigation
fix(secrets,#14951): CLAUDISH_PROXY_KEY entre dans SECRET_KEYS (organe de propagation) - #15032
Conversation
…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>
|
Une Pour passer ce gate, réécrivez le champ |
jsboige
left a comment
There was a problem hiding this comment.
[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.
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
left a comment
There was a problem hiding this comment.
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_KEYintact (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→Trueavec témoinVLLM gathered: True— c'est le test anti-patch-inerte que l'issue exigeait, et il est bien au-delà du minimum (sémantique--check/--strictdocumenté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.
Path-collision (organ #13359/#13615)Cette PR #15032 (
|
|
Réserve |
|
Diagnostic du PR gate rouge au head |
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->.envne 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). AjouteCLAUDISH_PROXY_KEY(nom de variable seul, aucune valeur) àSECRET_KEYSdansscripts/secrets/render_envs.py, calqué sur le précédentQDRANT_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 etx-proxy-keyrendent tous deux 200 sur une complétion réelle).Garde-fous respectés
os.getenv("X", "<valeur>")interdit, secrets-hygiene).VLLM_API_KEYnon retiré deSECRET_KEYS(geste distinct, claudish: la cle cliente du proxy n'a aucun organe de propagation — CLAUDISH_PROXY_KEY absent de SECRET_KEYS #14926)..secrets/master.envnon touché (gitignoré, hors dépôt).Validation
Contrôle positif (effet mesurable, pas un
--checkvert inerte) — même entrée, sortie différente avant/après :Avant, la clé était silencieusement ignorée par le chemin de collecte ; après, elle est propagée. Le contrôle
VLLM_API_KEYprouve que la collecte fonctionne (valeur bidon uniquement, fixturetmp_pathhermé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 demaster.envest rapportéeOUT OF SCOPEetrender_envs.py --check(non-strict) rend rc=0 — l'ajout ne crée pas d'échec--checkinattendu. (--strictrend 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.yamln'invoquerender_envs.py --check/--strict— aucun risque de gate CI.Périmètre
1 fichier :
scripts/secrets/render_envs.py(+9 lignes).