Repository navigation
fix(harness,#18102): in_flight reason splits declared open PR from comment-only cross-ref - #18182
Conversation
…s comment-only cross-ref classify partitioned open PRs into one undifferentiated reason; a census comment on an unrelated open PR (permanent cross-referenced event, e.g. #17434 freezing #15173/#15703) read as "work in progress" where it was a contextual mention. The reason now names both origins separately: body/title mention = "declare this issue (plausible next phase)"; otherwise = "comments only (cross-referenced contextual mention, undeclared)". Verdict unchanged in both cases (reason change first per acceptance 1); unreadable body defaults to undeclared (fail-safe, #15060 philosophy). Driver enriches open PR bodies+titles too (_with_merged_pr_bodies -> _with_pr_bodies; closed-unmerged PRs stay unfetched). Title stays CLOSED for every labelling decision (#17759 arbitration); delivered not widened. Firsthand via the real chain: #18146 <- open #18181 renders in_flight "declare this issue in body/title (plausible next phase)"; the issue's named instances #15173/#15703 no longer reproduce as in_flight because #17434 merged since (measured 2026-09-28). 50 tests (44 + 6 new). Closes #18102 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
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 |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw]
VERDICT: APPROVE — revue structurelle, les 2 fichiers changés lus au head a3bc441 (classify + driver _with_pr_bodies + les 6 nouveaux tests ligne à ligne).
Vérifié firsthand au head :
- Le split de raison #18102 :
_declared_open(ancre#N\bsur body OU titre) partitionne les PRs ouvertes en déclarantes (« plausible next phase ») vs contextuelles (« comments only … undeclared ») ; verdictin_flightinchangé dans les deux cas, exactement l'acceptance 1 (« changement de RAISON d'abord — verdict inchangé sauf arbitrage explicite »). - Contrainte #17759 tenue dans le code, pas seulement promise : le titre n'informe que la RAISON d'un verdict déjà rendu (commentaire l.283-285 + test dédié),
deliveredpas élargi. - Fail-safe cohérent #15060 : body illisible →
""→ « undeclared », jamais « plausible next phase » (docstring_with_pr_bodies+ test). - Wiring :
_with_pr_bodiesenrichit désormais les PRs ouvertes (body+titre, cache par numéro), les fermées non-mergées épargnées — test monkeypatch, PR 40 non consultée. - Les 6 nouveaux tests rejouent les scénarios d'acceptance : déclarante body, déclarante titre, contextuelle #15173←#17434, mixte, body illisible, wiring driver.
- CI au head : 17/17 checks complétés PASS dont Scripts Tests (CPU) — le workflow déclenche sur
scripts/**et lancepytest scripts/testsdirectory-wide (pas de liste explicite), le fichier de la PR est donc réellement exécuté.PR gatepending = classe DWELL sur une PR de 13 min (levée ~06:07Z), pas un verdict.
Réserves (non bloquantes, versées pour l'étape 2) :
- Le commentaire promis « instance vivante de la classe » (balayage des PRs ouvertes, « résultat en commentaire ci-dessous post-push ») n'était pas encore déposé à l'heure de la review (seuls les 2 commentaires bots). Qu'il atterrisse avec le résultat du scan : après le merge de #17434, c'est lui qui prouve que la classe existe encore in vivo.
- Watch-point pour l'éventuel arbitrage du verdict (étape 2) :
_declared_openutilise l'ancre nue#N\b, plus lâche quedelivery_marker(adjacence See/Part of/Closes/Fixes). Pour la raison d'aujourd'hui c'est sans effet (verdict identique quel que soit le partitionnement), mais si l'étape 2 change le verdict des comment-only en s'appuyant sur ce même prédicat, une mention contextuelle dans le body d'une PR ouverte (« compare with #N ») récréera le gel permanent par la porte du body — même classe de faux positifs que #15060 côté merged. Le prédicat de l'étape 2 devra être resserré sur la sémantiquedelivery_marker.
Approve rendu sous le régime armé #3219 (opener jsboige, checks relevés au tour, ordre full-read → checks → APPROVE).
|
[ADJOINT PREFLIGHT] Note de lecture (informatif) : sticky PR-PATH-COLLISION present (ordre de merge a croiser avec les PRs citees). |
Grain: DEEP/harness -- lane myia-po-2026:CoursIA -- prev: DEEP/tooling #18181
Closes #18102
Constat repris
classifytesteopen_prsavant tout calcul dedeclared: un commentaire de census sur une PR OUVERTE d'une autre famille pose un événement cross-referenced permanent, et la raison unique « open PR(s) #N reference this issue » masque un gel de labellisation derrière une lecture « travail en cours ».Correctif — la raison distingue les deux origines, le verdict ne change pas
La branche
in_flightpartitionne les PRs ouvertes :#N:open PR(s) #X declare this issue in body/title (plausible next phase).open PR(s) #X reference it via comments only (cross-referenced contextual mention, undeclared).Les deux origines coexistant sont citées dans la même raison. Body illisible/non transporté ⇒ conservateur « undeclared » (fail-safe cohérent #15060). Verdict
in_flightinchangé dans les deux cas — changement de raison d'abord, conformément à l'acceptance 1._with_merged_pr_bodies→_with_pr_bodies; les fermées non-mergées restent épargnées — voie abandonnée, aucune branche de verdict).type(scope,#N):du depot, et les issues renduesactivepar le [INFO] du protocole #17759 tient) : lire le titre d'une PR ouverte n'informe ici que la RAISON d'un verdict déjà rendu, jamais un label.deliveredn'est pas élargi au-delà du marqueur[INFO]en tête (mécanisme B tel que livré).Contrôles mesurés firsthand par la vraie chaîne (
timeline_facts+issue_detail+_with_pr_bodies+classify, données réelles du 2026-09-28)Closes #18146en body) →in_flight— « open PR(s) fix(notebook-tools,#18146): count_exercises sees scaffolded stubs, bold titles, and correct pairing #18181 declare this issue in body/title (plausible next phase) ».no_deliverycontextuel, post_bake_slides: la collecte gloutonne mange du balisage, la docstring contredit le code, et le hors-racine-de-build doit etre refuse plutot que reecrit #15703 →active, commentaire du 27/09 postérieur au dernier merge — deux verdicts issus de branches de code inchangées par ce fix).Tests
scripts/tests/test_candidate_delivered.py: 50 passed (44 pré-existants + 6 nouveaux) — raison déclarante body / déclarante titre / contextuelle / mixte / body illisible ⇒ undeclared / wiring_with_pr_bodies(la PR fermée non-mergée n'est pas consultée, la raison suit l'enrichissement).🤖 Generated with Claude Code