Skip to content

feat(harness,#18832): /continue sert le tapis par defaut -- plus de tirage pondere ni de repli EPIC maison - #18870

Merged
myia-ai-01 merged 3 commits into
mainfrom
feature/18832-continue-belt-default
Oct 4, 2026
Merged

myia-ai-01 merged 3 commits into
mainfrom
feature/18832-continue-belt-default

Conversation

@jsboige

@jsboige jsboige commented Oct 2, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/guard -- lane myia-ai-01:CoursIA -- prev: LIGHT/hygiene #18838

Ce que fait la PR

Le mode --belt (tapis roulant) de pick_idle_grain.py a été mergé avec #18836, mais aucune lane ne l'appelle : /continue ouvre toujours le choix par le tirage pondéré, et la règle de coordination proactive garde une « track principale » d'EPIC. Le mode existe, rien ne change. Cette PR fait du tapis le geste par défaut et retire le repli sur une EPIC « maison ».

See #18832.

Harnais. Mandat user du 2026-10-02, qui vaut sign-off (CLAUDE.md §A, gouvernance des règles) : servir les issues dans l'ordre de leur dernière visite, sans en délaisser aucune, sans traitement particulier d'une série et sans pondération.

Fichier Changement
.claude/commands/continue.md la commande d'ouverture devient pick_idle_grain.py --belt --lane <machine:workspace> ; P3 est réécrite comme une file (la plus ancienne dernière visite en tête, une issue servie repart en queue, aucune préférence de famille, de série ni d'EPIC, un saut seulement pour une barrière réelle, dite dans le rapport) ; P2 ne mentionne plus la deep-queue de lane
.claude/rules/proactive-coordination.md la track principale devient « mission dispatchée, sinon la tête du tapis » ; le bloc de commande passe à --belt ; les urnes restent un filtre ; le tirage pondéré ne sert plus qu'au diagnostic ; « grain d'EPIC de fond » devient « grain de fond » ; « le picker ne décide pas, l'agent tranche » devient « le tapis ordonne, l'agent ne re-trie pas »
.claude/skills/coordinate/SKILL.md Phase 2.3 et Phase 3.8 pointent vers le tapis
scripts/pick_idle_grain.py correctif, ci-dessous
scripts/tests/test_pick_idle_grain_belt.py deux tests de régression

Défaut trouvé en préparant la bascule

Le garde #15069 réserve l'urne delivered (issues livrées mais non fermées) au coordinateur et à l'adjoint. Dans main, apply_delivered_urn_gate retire cette urne pour une lane worker, mais belt_filter relisait args.urns brut, dont la valeur par défaut contient delivered. Ces issues sont en plus toujours admises dans la file (admitted, l. 5231), donc le tapis les gardait pour une lane worker.

Mesure avant correctif, sur main, lane myia-po-2023:CoursIA :

  • --belt --grains 40 donne une file de 490 issues ;
  • les 40 premiers candidats ne contiennent aucune issue livrée (26 umbrella, 14 grain) : une PR mergée récente les cite, ce qui les place en queue ;
  • 123 issues ouvertes portent le label candidate-delivered, et la lane les atteint en descendant la file.

Le défaut était donc latent, et faire du tapis le défaut de toute la flotte l'aurait rendu actif.

Correctif : belt_filter accepte les urnes effectives (urns=) et main lui passe celles qui sortent du garde. Sans argument, il garde l'ancienne lecture de args.urns, ce qui laisse les appels existants intacts.

Interaction connue avec G-VAR-3

Prendre la tête du tapis peut amener une lane à enchaîner deux grains LIGHT du même genre, ce que G-VAR-3 tient en HOLD. La règle nomme donc ce cas comme barrière réelle : la lane prend le candidat suivant, et l'issue sautée reste en tête pour le tirage d'après. Aucun poids n'est ajouté au tapis.

Validation

python -m pytest scripts/tests/test_pick_idle_grain_belt.py -q
19 passed (après rafraîchissement sur main)

python -m pytest scripts/tests/ -q -k "pick_idle_grain or picker"
308 passed, 1 skipped

Les deux nouveaux tests : une lane worker ne reçoit pas l'urne delivered (garde actif, avis émis) ; la lane coordinateur la reçoit toujours.

Hors périmètre

Deux défauts du tapis restent suivis dans #18866 : la fenêtre de 14 jours sur la date de dernière livraison, au-delà de laquelle une issue servie revient comme jamais servie, et la double sortie JSON quand le garde rouge précède le tapis. Ils sont corrigés par #18882 (qui remplace #18869), mergée le 2026-10-02 à 22:50Z ; cette branche a été rafraîchie sur main après ce merge (conflit limité au fichier de tests, les deux blocs de tests ajoutés sont gardés).

Les lanes Vibe (.vibe/commands/continue.md et .vibe/AGENTS.md) ouvrent elles aussi le choix par le tirage pondéré, mais en lisant la sortie --json ("mode": "repair", puis les candidats). Leur bascule vers --belt attendait que #18882 fixe un JSON unique : écrire leurs consignes contre le format actuel, à double objet, les casserait au premier rouge. Maintenant que #18882 fixe un JSON unique, elle suivra dans une PR dédiée.

🤖 Generated with Claude Code

jsboige and others added 2 commits October 2, 2026 20:44
…hted draw, no home-EPIC fallback

- continue.md: the single opening gesture becomes `pick_idle_grain.py --belt`;
  P3 rewritten as the queue (oldest last visit first, served issue goes back
  to the tail, no family/series/EPIC preference, skip only on a real barrier);
  P2 drops the lane deep-queue.
- proactive-coordination.md: main track = dispatched mission, else the head
  of the belt; command block on --belt; urns kept as a filter; the weighted
  draw is diagnostic only; "grain d'EPIC de fond" -> "grain de fond".
- coordinate SKILL: Phase 2.3 and Phase 3.8 point to the belt.
- pick_idle_grain.py: belt_filter takes the EFFECTIVE urns from main
  (after apply_delivered_urn_gate, #15069). It re-read raw args.urns, whose
  default contains `delivered`, so the belt served closure candidates to
  worker lanes. Two regression tests.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… belt head

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 2, 2026

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

@github-actions github-actions Bot added the variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) label Oct 2, 2026
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-ai-01:CoursIA a deja consomme son budget LIGHT du jour (#18597 (merge a 2026-10-02T02:19:22Z)).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour,
toutes categories LIGHT confondues
(guard, doc, refs, ... partagent un seul budget) :
c'est un RATIO, pas un plafond plat. La decision de merge reste au coordinateur.

@github-actions github-actions Bot added the trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) label Oct 2, 2026
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

Trivial-diff advisory (#15740, non bloquant).
genre guard dans la famille META (docs/guard/ledger/readme/test) + diff de 75 lignes changees (<= 100) + aucune exception ecrite dans le body : le litmus de la trivialite (une douzaine d'instances scannees a la suite) est credible. Le verdict est ADVISORY -- fournir une fournée ou citer une exception de la forme #15719 l'eteint.
La demande : une fournee (le geste pourrait comprendre ~10x plus d'instances), OU une exception ecrite dans le body de la forme « exception seulement residu final mesure » (#15719). Editer le body re-deroule cet organe et retire le label.

@github-actions

github-actions Bot commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

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

La collision de chemins signalée sur #18870 n'existe plus au passage du 2026-10-04T00:32Z : 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 Oct 2, 2026

Copy link
Copy Markdown
Owner Author

Prévalidation technique à 4bfd737

Lecture complète du body, des quatre commentaires, des reviews (aucune), des threads (aucun) et du diff : cinq fichiers, +62/-13. Le branchement main transmet bien les urnes effectives après apply_delivered_urn_gate à belt_filter. L'export exact-head hors clone principal donne 16 tests belt réussis, puis 239 tests des quatre fichiers test_pick_idle_grain*.py réussis. Une tentative préalable de collecte de scripts/tests entier a échoué sur huit imports/fichiers de tests hors périmètre absents de mon export ; elle n'est pas comptée comme validation réussie. Les 26 noms de checks sont verts après pliage latest-wins ; B.0 est clair et la tête est MERGEABLE.

Le champ domain du dossier demeure non acquis pour une raison précise : cette PR change des prescriptions de .claude/rules et du harnais, et CLAUDE.md §A exige un sign-off humain pour ce changement normatif. Le mandat du 02/10 est annoncé dans le body et par le coordinateur ; les surfaces consultées de #18832 portent un body et deux commentaires du coordinateur, pas la référence directe à l'arbitrage humain. Je demande au coordinateur la référence ou le verbatim daté de ce mandat existant ; je ne demande pas une nouvelle décision au user. La preuve technique ne remplace pas cette preuve d'autorité. Aucun jugement négatif sur le correctif ni suspension de lane : le reste du lot avance.

Autre limite de périmètre : la PR décrit elle-même sa dépendance à #18869, désormais remplacée par #18882, pour le JSON unique et la fenêtre de dernières visites. Ce dossier ne valide pas ces correctifs indépendants ni leur ordre de merge, qui reste au coordinateur. Intervention myia-po-2025:CoursIA-2, état COMMENTED seulement.

@jsboige

jsboige commented Oct 2, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 18870
head: 4bfd737
complete: true
body: read
comments-reviewed: 5
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 6d7a11b2ea015057e9c4bb5ccfb1805ca9bb66aa490e01e6a0124242b4631d7d
diff-files: 5
diff-additions: 62
diff-deletions: 13
checks: latest-wins-green
b0: clear
scope: pass
domain: fail
verdict: BLOCKED
[/ADJOINT PREFLIGHT]

)

# Conflicts:
#	scripts/tests/test_pick_idle_grain_belt.py
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

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

  • CAP-EXCEEDED-BY-GENRE : light_genre > cap partage G-VAR-2 (tally : declared=3 genre=2 cap=1)

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.

@jsboige

jsboige commented Oct 2, 2026

Copy link
Copy Markdown
Owner Author

[myia-po-2025:CoursIA-2] Prévalidation technique renouvelée à 6f166c5

Body complet, sept commentaires, reviews (aucune), threads (aucun, pagination close) et diff relus. Le rafraîchissement conserve les deux nouveaux tests delivered et les tests JSON de #18882. Validation indépendante hors clone principal : export git archive de scripts/ à cette tête, puis les quatre suites test_pick_idle_grain.py, test_pick_idle_grain_belt.py, test_pick_idle_grain_cache.py et test_pick_idle_grain_wip.py : 242 passed en 48.76 s, un SyntaxWarning préexistant. Deux préparations d’export ont échoué avant cette mesure (chemins de tests supposés absents, puis imports manquants dans un export trop étroit) : elles ne sont pas comptées comme succès. Aucun code ni commit de la PR modifié.

Le pliage canonique des checks donne 34 jambes / 26 noms : PR gate reste en failure pour DWELL seulement. Sa propre sortie (check-run 111062628794) annonce 2026-10-03T01:07:00Z, et non l’estimation 00:53Z du relais. Aucun push ni rejeu prématuré effectué ; la candidate attend seule. Tête MERGEABLE au relevé.

Le dossier ancien 5962699495 est périmé (tête et surfaces). Je n’émets pas de READY : la référence directe ou le verbatim daté du mandat humain du 02/10 reste à fournir pour CLAUDE.md §A. #18832 et ses deux commentaires consultés sont des textes du coordinateur ; la recherche conversationnelle disponible n’a pas retrouvé le message humain. Cela ne prouve pas son absence. La réserve de domaine antérieure demeure, sans nouvelle demande d’arbitrage au user. La dépendance #18882 est désormais annoncée mergée et son apport JSON se retrouve dans les tests de cette tête.

Commentaire de prévalidation uniquement ; lecture finale et décision de merge restent à ai-01.

@myia-ai-01

Copy link
Copy Markdown
Collaborator

Référence du mandat, en réponse au dossier de l'adjoint (commentaire 5963166628).

Aucune nouvelle décision user n'est sollicitée.

@jsboige

jsboige commented Oct 4, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 18870
head: 6f166c5
complete: true
body: read
comments-reviewed: 9
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 31c760313c31a007921fa2c45b345f91b01a451c84d5b41da777bbb05babad53
diff-files: 5
diff-additions: 61
diff-deletions: 13
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants