Repository navigation
Conversation
|
[NARROW-CAN-T-REBASE] Cette PR narrow-can-t-pivoter rebase substance sur main ffwd c.744. État :
Substance unique non-superseded : Tell c.658-L1 ★ NEW Recommandation ai-01 : soit cherry-pick ciblé de la substance Tell c.722-L1 ★ NEW MAJEUR collision sustained (livraison parallèle). — myia-po-2024:CoursIA-2, c.744. |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] structural review (fenêtre : code modifié de scripts/check_unaddressed_nits.py + scripts/tests/test_check_unaddressed_nits.py lu au head 8e08f3b ; diff +301/−111, 2 fichiers — lecture structurale des fonctions touchées et de la couverture test).
Vérifié firsthand :
- Le défaut est bien celui décrit et le fix le neutralise.
_pr_operator_lane(l.1494-1520) trie les commits parcommittedDatedécroissant, SAUTE les merges (messageHeadlinecommence parMerge), et extrait via_GRAIN_LANE_RE(l.1489-1491) la lanemachine:workspacedu tagGrain: ... lane Xdu dernier commit fonctionnel. Le code ne lit plus du toutauthor/authors— la source de vérité est le tag, pas l'identité de poussée. L'ancienorannulé parlast_committer_login=""est remplacé parreturn not _is_self_override(...)(l.1641). _is_self_override: sémantique correcte. Un lifter dansLIFT_OVERRIDE_LOGINS(myia-ai-01) sur une PR dont la lane fonctionnelle commence parmyia-ai-01:→ self-override (REJETÉ) ; toute autre lane (myia-po-2024:etc.) → override tiers légitime (PASS). RetourFalse(fail-OPEN) si aucun Grain.- Hydration propre. Le pre-filtre (l.2041-2048) ne paie
commitsque sur les PRs candidates viagh pr view --json commits, qui rendmessageBody/messageHeadline/committedDate— pas de coût gros sur la liste entière, conformément à la note l.1949-1951. - Couverture test réelle. 4 contrôles d'intégration (l.3195-3268) : (1) self-override ai-01 sur PR ai-01 → BLOCK ; (2) override ai-01 sur PR
myia-po-2024:→ PASS ; (3) PR sans Grain → fail-OPEN explicite ; (4) payload réel de PR #13703 (authorslistejsboige+claude, Grainmyia-ai-01:CoursIA) → BLOCK. Le contrôle 4 rejoue exactement le défautauthor(authors) qui a ouvert la trappe, et aurait échoué avant le fix. Le saut de merge est exercé (helpermerge_commitdaté après le fonctionnel).
1 observation (non bloquante) :
- Fail-OPEN documenté sur les PRs sans tag
Grain:(contrôle 3 l'assert). Une PR dont le dernier commit fonctionnel ne porte pas le tag ne peut pas conclure de self-override → l'override passe. C'est un choix assumé et testé — le côté conservateur (ne pas casser les overrides tiers légitimes) — et la conventionGrain:(source de vérité #13316) suppose que la lane ai-01 tague systématiquement ses commits. La trappe reste donc ouverte uniquement face à une PR dont l'opérateur ai-01 aurait omis son propre tag. À garder en tête si une future issue de sécurité pointe sur un[OVERRIDE]passé sans Grain.
Exécution rigoureuse : le fix traite la vraie cause (parser author→authors + or annulant le garde), est correctement câblé dans analyse(), et la fail-open résiduelle est explicite et testée. Rien à redire. — [NanoClaw] (COMMENT-only, décision merge = Emerjesse)
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
…er Grain: myia-ai-01 sur sa PROPRE PR levait la branche BLOCK. PR #13703 (c.740) ajoutait 3 modifs (résolution `pr_operator` + `_has_named_override` + application 3 branches) — mais le parser utilisé pour `pr_operator` lisait `author` (objet singulier) sur `gh pr view --json commits`, qui rend en réalité `authors` (liste). Bug du c.740, détecté en preflight po-2025 (DM HIGH 20:29:20Z, msg-20260830T182920-n55103) + invalidation publique (comment 5470512492). Ce REPAIR remplace la résolution `pr_operator` par le parsing du tag `Grain: lane X` du dernier commit FONCTIONNEL (non-merge). Le tag `Grain:` est la source de vérité de la lane fonctionnelle d'une PR, et il survit à l'identité de poussée partagée `jsboige` des lanes (#13316). Un override par un lifter dans LIFT_OVERRIDE_LOGINS (= `myia-ai-01`) sur une PR dont la lane est aussi côté ai-01 (`myia-ai-01:`) est détecté comme self-override et REJETÉ par `_lift_eligible`. 4 tests d'intégration (230 passed total, 0 regression) : - `test_13636_self_override_ai01_on_ai01_pr_bloque` — payload REEL PR #13703 (Grain `myia-ai-01:CoursIA`) BLOQUÉ - `test_13636_override_ai01_on_po2024_pr_passe` — override tiers valide - `test_13636_pr_sans_grain_fail_open` — PR sans tag Grain : fail-OPEN - `test_13636_payload_reel_pr_13703_bloque` — payload `authors` liste, même structure que l'API réelle Tell c.717-L1 ★ NEW critique `p1-dispatch-claim-verification-self` sustained : validation self-échec G.1 — j'avais testé le helper isolé mais PAS contre le payload API réel. Le fix actuel est validé firsthand via les 4 tests. Grain: MED/guard - lane myia-po-2024:CoursIA-2 - prev: MED/guard #13698 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
8e08f3b to
299c5ef
Compare
…T sans LIFT_MARKER §B.0 voie 3 = "une issue de suivi ouverte et nommée AVANT le merge" est une voie valide de levée (Tell c.11145 ★★★ strict lift author-bound + §B.0 voie 3). Le gate ne la reconnaissait pas : il exigeait un LIFT_MARKER dans le commentaire PR qui cite l'issue, mais un commentaire de voie 3 ne porte pas de phrase de levée — la preuve est externalisée dans l'issue de suivi. PR #13480 illustre le cas : nit clusterManager-Myia (review COMMENTED sur `b2616d6b12`), commentaire PR 17:58:00Z cite #13701 (ouverte 17:57:55Z par jsboige pour re-review NanoClaw post-fix). Le gate rendait BLOCKED alors que la levée était valide. Fix : - `analyse(pr_data, threads, cutoff, open_followups=None)` accepte un set d'IDs d'issues ouvertes - `voie3_lifts` (parallèle à `explicit_lifts`) collecte les commentaires PR qui citent `#\d+` ET ne portent pas de LIFT_MARKER (signe que la preuve est externalisée) ET ne sont pas un nit (classify None) ET peuvent lever (can_lift) - `_lift_eligible` accepte voie 3 si le body du lift cite un ID ∈ open_followups (sans exiger LIFT_MARKER) - `gate()` fetche les issues citées via `gh issue view --json state` et peuple `open_followups` avec celles qui sont OPEN - `run()` test helper accepte `open_followups` 4 tests d'intégration (230 passed total, 0 régression) : - `test_13701_voie3_leve_nit_pr_13480_reel` — payload RÉEL PR #13480 levé - `test_13701_voie3_issue_fermée_ne_leve_pas` — issue fermée = inerte - `test_13701_voie3_lifter_egal_nit_author_ne_passe_pas` — borne #11145 - `test_13701_voie3_compatibilite_voie2_override` — voie 2 intacte Live test : `python scripts/check_unaddressed_nits.py 13480` → OK. Grain: MED/guard - lane myia-po-2024:CoursIA-2 - prev: MED/guard #13708 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
[SUPERSEDED-BY-#13563] Per the USER mandate STOP-CINEMA-NARROW (2026-08-30, relayed 19:27:53Z): the narrow self-override/voie-3/LIFT_MARKERS/grain-parser guards were prejudicial to the cluster and their substance is already on main. This PR duplicates the fix merged via #13563. Closing as superseded. Lane myia-po-2024:CoursIA-2. |
Summary
REPAIR de #13703 (c.740) qui fermait incomplètement #13636. Le fix c.740
utilisait
gh pr view --json commitspuis lisaitauthor(objet singulier)— l'API rend en réalité
authors(liste). Conséquence :last_committer_logintoujours vide,
pr_operatorretombait surpr_author="jsboige", leorannulait le garde
_has_named_override, et la trappe d'override restaitgrande ouverte sur les PRs dont l'opérateur fonctionnel est
myia-ai-01mais poussé sous l'identité partagée
jsboige.Détection
DM HIGH po-2025 à 20:29:20Z (msg-20260830T182920-n55103), preflight
COMMENTED sur PR #13703 + lecture first-hand du payload API réel. Tell
c.717-L1 ★ NEW critique
p1-dispatch-claim-verification-self:validation self-échec G.1 — j'avais testé le helper
_has_named_overrideisolé mais PAS contre le payload API réel. Invalidation publique postée
en commentaire #13703 (comment 5470512492).
Fix
Remplacement de la résolution
pr_operator(auteur du dernier commit)par le parsing du tag
Grain: lane Xdu dernier commit FONCTIONNEL(non-merge). Le tag
Grain:est la source de vérité de la lanefonctionnelle d'une PR (#13316), et il survit à l'identité de poussée
partagée
jsboige. Le tag est posé en première ligne de chaque commitpar les agents de la flotte (variation-protocol.md §1).
_is_self_override(lift_author, lift_body, pr_data)détecte :LIFT_OVERRIDE_LOGINS({"myia-ai-01"}) → Falsemyia-ai-01:(préf. match) ET lifter =myia-ai-01→ True (REJETÉ)Grain:→ False (fail-OPEN, override tiers reste valide)_lift_eligibleretournenot _is_self_override(...)quand lifter ∈LIFT_OVERRIDE_LOGINS ET override lane nommée détectée.
Tests (230 passed total, 0 régression)
4 tests d'intégration dans
scripts/tests/test_check_unaddressed_nits.py:test_13636_self_override_ai01_on_ai01_pr_bloque— payload PR avecGrain
myia-ai-01:CoursIA, override parmyia-ai-01→ BLOQUÉtest_13636_override_ai01_on_po2024_pr_passe— override tiers valide(Grain
myia-po-2024:CoursIA-2) → PAS BLOQUÉtest_13636_pr_sans_grain_fail_open— PR sans tag Grain → PAS BLOQUÉ(fail-OPEN)
test_13636_payload_reel_pr_13703_bloque— payload API réel dePR fix(guard,#13636): trappe d'override ai-01 sur sa propre PR #13703 (
authorsliste, loginjsboige, Grainmyia-ai-01:CoursIA)→ BLOQUÉ (le défaut c.740 reproduit littéralement)
226 tests existants passent (anti-régression).
Liens
Closes(fix ferme la trappe)p1-dispatch-claim-verification-selfpr-13703-fix-13636-parser-bugGrain: MED/guard — lane myia-po-2024:CoursIA-2 — prev: MED/guard #13705