Repository navigation
fix(harness): /coordinate dispatche avant de merger, et merge par la queue - #16197
Conversation
…queue Le skill encodait l'ordre inverse de celui qu'il prescrit. Sa Phase 3 « Production et digestion » ouvrait sur « Production avant digestion (HARD) » puis plaçait sept étapes de merge avant la Phase 4, où vivent les dispatchs. Or la passe de merge ne termine jamais — le pool est non borné et chaque PR ouvre trois surfaces B.0 à lire — donc les lanes étaient affamées par construction du cycle, et le coordinateur passait son temps à rejouer l'audit déjà produit par l'adjoint et les bots. Symptôme mesuré : un cycle de plus de 4 h pour une cadence de 4 h. Trois changements, sur correction user du 2026-09-14 : 1. Inversion. La Phase 3 devient dispatchs / relances de nits / mémoire, avec un budget explicite de 30 minutes ; la Phase 4 devient la passe de merge. Le sweep trié par ancienneté est capturé une seule fois et sert les deux. 2. Merge PAR LA QUEUE. Sélectionner les PRs CLEAN sélectionne les PRs neuves par construction : une PR est verte parce qu'elle est récente et vieille parce qu'elle est bloquée. Merger la tête dégrade en outre la queue — le merge de #15627 a rendu #15799 et #15915 DIRTY. 3. Non-répétition explicite. Les verdicts Hermès / NanoClaw / adjoint se lisent, ils ne se rejouent pas : seuls le delta depuis la dernière review, les réserves non levées et la preuve décisive sont revérifiés. La relance nominative des nits bloquants devient une étape à part entière : une réserve posée par ai-01 et non relancée ne peut être levée par personne. Une seule investigation par cycle, en fin de session et plafonnée. Aucune règle de fond n'est supprimée : B.0, les gates H.4/catalogue, la mécanique de merge et le garde du rouge sans lane sont préservés mot pour mot, déplacés dans la phase qui les exerce. See #16194 Co-Authored-By: Claude Opus 5 (1M context) <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 |
…t precedent Le commit precedent et le body de la PR annoncaient tous deux « une seule investigation par cycle, en fin de session et plafonnee ». Le diff ne le contenait pas : Phases 3 et 4 avaient ete reecrites, Phase 5 laissee intacte. Body qui ne correspond pas au diff — le defaut exact que la review refuse aux autres. Corrige en ajoutant la clause plutot qu'en abaissant la prose : c'est la moitie de la correction user qui aurait autrement disparu en silence. Phase 5.5 : toute question ouverte qui n'est pas un bloqueur de merge se note et attend. Si l'objet est reellement urgent, il devient un grain dispatche, pas une enquete du coordinateur. See #16194 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Path-collision (organ #13359/#13615)Cette PR #16197 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
Le défaut est structurel, pas comportemental
/coordinateprescrivait « Production avant digestion (HARD) » en tête de sa Phase 3, puis plaçait sept étapes de merge avant la Phase 4 — celle où les lanes reçoivent leur travail. Comme la passe de merge ne termine jamais (pool non borné, trois surfaces B.0 par PR, 109 PRs ouvertes au moment de la mesure), la Phase 4 recevait le temps restant, c'est-à-dire aucun. Les lanes étaient affamées par construction du fichier.Symptôme mesuré : un cycle de plus de 4 h pour une cadence de 4 h, dont l'essentiel passé à rejouer un audit déjà produit par l'adjoint et par Hermès/NanoClaw.
Ce que la PR change
Pourquoi la queue et pas la tête. Sélectionner les PRs
CLEAN/ vertes /rc=0sélectionne les PRs neuves par construction : une PR est verte parce qu'elle est récente, et vieille parce qu'elle est bloquée. Le tri par état trie donc par date sans le dire. Et merger la tête dégrade activement la queue : le merge de #15627 a rendu #15799 et #15915DIRTY.La relance des nits devient une étape à part entière. Une réserve non levée qui n'est pas renvoyée nommément à la lane de l'auteur devient un grain qu'aucune lane ne sait qu'elle doit exécuter — et celles posées par ai-01 ne peuvent être levées par personne d'autre.
La non-répétition est écrite noir sur blanc. Les verdicts
[Hermes] COMMENT_WITH_CONCERNS,EXEC_PROVED/STRUCTURAL_ONLY/SUSPECT_REGRESSIONet les décision packs de l'adjoint se lisent, ils ne se rejouent pas. Seuls sont revérifiés : le delta depuis la dernière review, les réserves non levées, la preuve décisive du claim central.Ce que la PR ne change PAS
Aucune règle de fond n'est supprimée. B.0 (lecture personnelle non délégable, organe
check_unaddressed_nits.py, « une levée porte un auteur et une heure »), les gates H.4 / catalogue byte-identique / scope-vs-titre, la mécanique de merge (--squash,--mergepour une base de stack, jamais--delete-branch), le garde du rouge sans lane (GRAIN-ORPHANS-SWEEP#13086) et la délégation à modèle explicite sont préservés mot pour mot — déplacés dans la phase qui les exerce, pas réécrits.Le diff est un déplacement de blocs plus trois ajouts (budget, ordre de queue, relance nominative). La ligne 8 sur
gh auth switchn'est pas touchée : elle relève d'une PR séparée.Validation
See #16194
Grain: MED/harness lane myia-ai-01:CoursIA
🤖 Generated with Claude Code