Revue F-104 (CAIRN-468) — ronde 2, tête 35abab24 (correctifs dda19976)
Verdict : REQUEST_CHANGES — une finding bloquante d'intégration (B2) ; le verdict de contenu de la revue 435 (APPROVED, B1 corrigée) tient. CI de la tête 6f2fb894 lue verte (porte / linux 03:11:54Z, porte / macos 03:11:02Z, état combiné success), mais la fusion rend 405 : la PR est mergeable: false depuis que main a reçu F-102 (e3cad262, CAIRN-467), base c8ca977d.
Verdict : APPROVED. Ronde 2 (review-feature, relecteur repris) sur le nouveau diff seul, 4b462767..6f2fb894 : correctif 33571698 (SHA de porte, 982/0 déclaré), tête 6f2fb894 qui n'ajoute que .cairn/runs/acts/CAIRN-463-apply-findings-1.md et une entrée d'inbox (git diff --stat : 2 fichiers, +48).
B1 (bloquant) — playSysbox lit la RAM réelle : _002 et _003 rougissent sur le runner macOS (run 213, job 285). À jouer sur une lima.ReadHostMemory posée, comme hostOf le fait dans internal/docker/memory_f104_test.go.
B1 (bloquant) — la prémisse « stdout alone moves » ne tient que sur un hôte de plus de 5 GiB de RAM : le harnais n'épingle pas lima.ReadHostMemory, et sur le runner macOS (run 213) docker/vm-absent-create et -fails (4GiB déclarés) rougissent par l'avertissement BR-477. Poser la couture dans le harnais : un enregistrement épingle ses faits d'hôte (BR-222, F-060 §3.4).
B1 (bloquant, volet à trancher sur le Mac) — aucun test ne lit readHostMemory darwin sur des octets connus ; TestBR_224_002 rouge avec la réponse 2GiB dit soit un runner sous 3 GiB, soit une lecture fausse. syscall.SysctlUint64("hw.memsize") existe sous darwin et retire le rembourrage à la main.
Revue F-104 (CAIRN-468) — ronde 1, verdict révisé après lecture de la CI
Complément à la revue 432 (information pour apply-findings, pas une finding de cette PR) : tools/test-cairn.sh rejouée sur la fusion locale de bdd411ed avec main 1d63327c rend 961 passed, 22 failed — toutes T69 test_BR_182_001, cause côté main : .cairn/runs/acts/F-106-m0.sh (absent de la tête de la PR) y est en 100644 avec un shebang, et la population lue (19) dépasse la taille assertée (18). Rouge avant la PR ; remonté à l'orchestrateur. En ronde 2, juger la porte par « échecs égaux à ceux de la base » tant que main n'est pas réparé, et lister les FAIL ids.
B1 (bloquante, BR-453 / BR-451) : Forgejo permet un jeton limité à des dépôts choisis (Specific repositories, read:repository / write:repository — forgejo.org/docs/latest/user/token-scope/, lu le 2026-10-30). La borne est donc le dépôt, pas le compte. À réécrire : accès Specific repositories, ce dépôt ; repository lecture-écriture ; Bound: **the repository**.
Verdict : REQUEST_CHANGES — une finding bloquante (B1), aucune non bloquante. Revue de bdd411ed contre F-098 gelée à 28f509af (review-feature, ronde 1, contexte vierge, revue 429 pour l'ouverture).
Non bloquant (BR-479, clarification « une ligne renvoie à cairn doctor … le lanceur n'affirme pas que la cause est la mémoire : il dit où le noyau l'écrirait ») : la clause « — the build did not fail on its own » affirme une cause que la règle ne demande pas. L'arrêt et l'état suffisent.
Non bloquant (BR-479 §Example : « renvoie à cairn doctor --project ., et sort en 1 sans autre message ») : cette ligne Info est un message de plus que l'exemple n'énumère pas. Libellé à l'implémentation (§3) : à garder ou retirer au prochain passage.
Non bloquant (BR-476 : « Elle ne descend jamais sous 2 GiB ») : un gabarit lui-même sous le plancher (tpl < MemoryFloor, pick < MemoryFloor) est rendu tel quel, sans ligne d'origine. Inatteignable avec le gabarit livré (8GiB), et TestBR_476_001 s'arrête si le gabarit change : rien à faire dans ce lot.
Revue F-104 (CAIRN-468) — ronde 1, contrat features/F-104-vm-memory-host-margin.md gelé à 09fbc277
Non bloquant, hors PR — à l'attention de l'orchestrateur. La population littérale 19 est exacte sur l'arbre de la PR (2fe98899 : 995/0 rejoué par la review). Mais main a avancé depuis la base : f1337b59 ajoute .cairn/runs/acts/F-106-m0.sh (shebang, mode 755), qui entre dans fl_pop. Sur main aujourd'hui la population vaut 19 pour un littéral 18 — T69 y est déjà rouge, masqué par [skip ci] ; après la fusion de #489 elle vaudra 20 pour un littéral 19. Le correctif appartient à main (f1337b59), pas à cette branche : soit fl_x_n=20 et son commentaire, soit retirer le bit exécutable de F-106-m0.sh.
review-feature — F-102 / CAIRN-467, ronde 1 — APPROVED
Non bloquant — accepté. Les trois couples exemptés sont ce que la spec prévoit (§9 Technical Constraints : l'étape INSTANCE vit dans CONTRIBUTING.md, livré ; §9 Pitfalls : « couple exempté … à ratifier par product, comme ceux de T85/T86 »). Même forme que les lignes T85/T86 existantes. La ratification est l'acte de product à l'acceptation, pas une retouche de la PR.
review-feature, ronde 1 — F-102 contre son contrat gelé (b148bec2). Diff lu contre main (c5c1ec5d), 19 fichiers.
Non bloquant, hors PR — à l'attention de l'orchestrateur. La population littérale 19 est exacte sur l'arbre de la PR (2fe98899 : 995/0 rejoué par la review). Mais main a avancé depuis la base : f1337b59 ajoute .cairn/runs/acts/F-106-m0.sh (shebang, mode 755), qui entre dans fl_pop. Sur main aujourd'hui la population vaut 19 pour un littéral 18 — T69 y est déjà rouge, masqué par [skip ci] ; après la fusion de #489 elle vaudra 20 pour un littéral 19. Le correctif appartient à main (f1337b59), pas à cette branche : soit fl_x_n=20 et son commentaire, soit retirer le bit exécutable de F-106-m0.sh.
Non bloquant — accepté. Les trois couples exemptés sont ce que la spec prévoit (§9 Technical Constraints : l'étape INSTANCE vit dans CONTRIBUTING.md, livré ; §9 Pitfalls : « couple exempté … à ratifier par product, comme ceux de T85/T86 »). Même forme que les lignes T85/T86 existantes. La ratification est l'acte de product à l'acceptation, pas une retouche de la PR.