Skip to content

fix(harness,#18102): in_flight reason splits declared open PR from comment-only cross-ref - #18182

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/18102-candidate-inflight-reason
Sep 29, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/18102-candidate-inflight-reason

Conversation

@jsboige

@jsboige jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/harness -- lane myia-po-2026:CoursIA -- prev: DEEP/tooling #18181

Closes #18102

Constat repris

classify teste open_prs avant tout calcul de declared : 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_flight partitionne les PRs ouvertes :

  • déclarante — le body OU le titre de la PR porte #N : open PR(s) #X declare this issue in body/title (plausible next phase).
  • contextuelle — ni body ni titre ne le portent (l'événement vient d'un commentaire seul) : 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_flight inchangé dans les deux cas — changement de raison d'abord, conformément à l'acceptance 1.

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)

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

…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>
@github-actions github-actions Bot added the variation-tag-genre-offlist GENRE hors de l'enumeration variation-protocol §1 label Sep 28, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2026:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-28) :

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 variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions github-actions Bot added the lane-claim-absent Closing issue carries no claim at all (#10223) label Sep 28, 2026
@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

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

[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\b sur body OU titre) partitionne les PRs ouvertes en déclarantes (« plausible next phase ») vs contextuelles (« comments only … undeclared ») ; verdict in_flight inchangé 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é), delivered pas élargi.
  • Fail-safe cohérent #15060 : body illisible → "" → « undeclared », jamais « plausible next phase » (docstring _with_pr_bodies + test).
  • Wiring : _with_pr_bodies enrichit 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 lance pytest scripts/tests directory-wide (pas de liste explicite), le fichier de la PR est donc réellement exécuté. PR gate pending = 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) :

  1. 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.
  2. Watch-point pour l'éventuel arbitrage du verdict (étape 2) : _declared_open utilise l'ancre nue #N\b, plus lâche que delivery_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émantique delivery_marker.

Approve rendu sous le régime armé #3219 (opener jsboige, checks relevés au tour, ordre full-read → checks → APPROVE).

@jsboige

jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner Author

Instance vivante de la classe comment-only (promis au body) — mesurée firsthand via la vraie chaîne le 2026-09-28 :

Balayage des PRs ouvertes (commentaires mentionnant des issues absentes de leur body/titre) puis relance de la chaîne complète sur les candidates :

Le balayage s'est arrêté là sur rate-limit GraphQL (budget partagé flotte) ; #10020 est mesurée, le complément n'apporterait que des doublons de la même classe.

(Commentaire posté en REST direct : fenêtre GraphQL flotte épuisée, cf budget partagé.)

@github-actions

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359) — résolue

La collision de chemins signalée sur #18182 n'existe plus au passage du 2026-09-29T05:37Z : aucune autre PR ouverte ne partage désormais de chemin de fichier avec elle. Note laissée en place de l'avertissement (retraction non destructive).

@jsboige

jsboige commented Sep 29, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2023:CoursIA
pr: 18182
head: a3bc441
complete: true
body: read
comments-reviewed: 4
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 133b36fd851963f7d01033695f9381c89409415ec2ad62e407a2f842c85b1830
diff-files: 2
diff-additions: 175
diff-deletions: 13
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
[/ADJOINT PREFLIGHT]

Note de lecture (informatif) : sticky PR-PATH-COLLISION present (ordre de merge a croiser avec les PRs citees).

@myia-ai-01
myia-ai-01 merged commit 1bb1fb6 into main Sep 29, 2026
20 of 23 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane-claim-absent Closing issue carries no claim at all (#10223) variation-tag-genre-offlist GENRE hors de l'enumeration variation-protocol §1

Projects

None yet

3 participants