Lanzamientos Gentleman

Gentleman Releases — 12 Aug 2026

Lo nuevo hoy

Today's highlights

Points forts du jour

Click en cualquiera para ir al detalle

Click any item to jump to the full section

Cliquez un élément pour aller à la section complète

🤖

gentle-ai

Gentleman-Programming
v2.4.0-rc.6
Beta

v2.4.0-rc.6 — Hotfix sobre rc.4

Este candidato reemplaza a v2.4.0-rc.4, que se tageó y publicó pero nunca llevó binarios, así que no llegó a nadie. v2.4.0-rc.5 se quemó por un error de tooling del lado del equipo y nunca se publicó. Dos defectos aparecieron justo en el camino que este candidato te pide ejercitar.

  • Un filesystem root ya no se responde como si fuera un proyecto: sdd-status --cwd / devolvía un status exitoso, vacío y totalmente plausible — changeName: null, artifactStore: openspec, planningHome: «/openspec». Una continuación de phase-failure que resolvía su working directory a la raíz del disco te leía como «SDD me perdió el proyecto» en vez de «apuntaste ese comando al directorio equivocado». Ahora rechaza y te nombra la continuación ejecutable.
  • Los cambios con backend Engram se cierran por su archive report: un cambio que alguna vez persistió un artefacto figuraba activo para siempre, porque los dos stores archivan distinto y solo uno deja rastro que el resolver lee — OpenSpec saca el directorio de changes/, Engram no mueve nada. Archive ya escribía sdd/{change}/archive-report y el patrón de título no lo reconocía: el único artefacto que probaba que un cambio estaba terminado era justo el que nunca se leía. Medido sobre un store real: treinta cambios de un mismo proyecto figuraban activos, siete de ellos archivados semanas antes. Nombrar un cambio archivado sigue resolviéndolo; solo el discovery lo excluye.

Todo lo demás es idéntico a rc.4 — mirá la entrada de abajo para el detalle completo del ledger de attempts, el contrato de review y el handoff de defectos.

Instalación: go install github.com/gentleman-programming/gentle-ai/v2/cmd/[email protected], o bajate un binario del release y verificalo contra SHA256SUMS.txt.

11 Aug 2026
github.com/Gentleman-Programming/gentle-ai →
Beta

v2.4.0-rc.4 — El ledger de attempts (superado por rc.6)

Publicado sin binarios y superado por rc.6 antes de llegar a nadie, pero acá está el contenido real del candidato, porque rc.6 lo lleva entero. Si rc.1 hizo que los rechazos nombraran su salida y rc.3 ató la prueba al candidato que estás entregando, este apunta a la superficie que ninguno de los dos cubrió: el ledger de attempts de SDD, donde un rechazo podía ser correcto, nombrar una salida real y aun así dejarte sin ningún lado adonde ir. Todo queda dentro de la línea 2.4.0 y no ensancha la API pública de Go.

  • El review actúa después de la implementación, no durante: un attempt que pasaba se rechazaba cada vez que el binding de review cubría los bytes previos al attempt — o sea, siempre, porque cambiar el candidato es para lo que sirve un attempt. Eso es el review decidiendo si la implementación puede terminar. La única salida nombrada exigía un review aprobado del candidato corregido, y producirlo abría un correction budget nuevo y un reviewer nuevo que el contrato prohíbe después de la verificación independiente. Cuatro puertas, todas con llave.
  • El kill switch era una media medida: la remediación unmanaged requería review apagado y que no existiera binding, así que un binding creado antes de apagar el review te seguía bloqueando correcciones. Con el review apagado no existe, y un binding que quedó colgado es una implicancia. Nada de esto debilita delivery: los gates rederivan su veredicto del candidato que realmente estás entregando, así que un candidato sin revisar se sigue rechazando en commit, push, PR y release. El binding se sigue registrando: el review deja de decidir, no deja de trackearse.
  • El ledger deja de contradecirse: status reportaba next_action: begin mientras acquire bloqueaba el mismo request, porque Begin evaluaba sus precondiciones del lado del repo dentro de su mutation closure, donde ninguna superficie read-only llegaba. Ahora las dos mitades pasan por un solo predicado.
  • Tres rechazos comparaban dos valores y no mostraban ninguno: ahora imprimen los dos lados — el árbol aprobado contra el cobrado con un git diff entre ellos, la revisión bindeada contra la actual, y la falla que nombra una corrección contra la que la cadena efectivamente tiene sin remediar. Uno de ellos le decía a los operadores que su input estaba mal cuando estaba bien y solo era viejo.
  • Un budget agotado ahora te pregunta: antes terminaba la conversación en prosa nombrando un reset que tenías que armar a partir de seis flags. Ahora te muestra la contabilidad adelante y un grant que corre tal cual. Los attempts que nunca corrieron el laburo se nombran como tales, porque un budget agotado significa otra cosa cuando nada se gastó en el candidato.
  • Las transiciones negociadas salen de una sola autoridad: el target canónico de STATUS y la proyección de recovery se mudaron a reviewtransaction, así que los adaptadores de CLI renderizan una decisión en vez de reconstruirla. El modo efectivo de review se resuelve una sola vez, antes de que STATUS publique eligibility o transición, así que un clone deshabilitado deja de recibir la oferta de un review que no puede arrancar.
  • El reporter de defectos deja de archivar bugs de otros proyectos: el handoff automatizado preguntaba si el workflow parecía bloqueado por un defecto de Gentle AI, y desde la silla del operador todo lo que te bloquea parece calificar. El test ahora es qué produjo la falla, no qué estabas haciendo cuando pasó: una invocación de Gentle AI que la produce es todo el gate; un workflow de Gentle AI que meramente la hospeda, no.

También trae: los upgrades del plugin de OpenCode verifican el manifiesto instalado en vez de asumir que la versión pedida se materializó, los MCP servers del workspace de Claude se escriben en .mcp.json — el archivo que Claude Code realmente lee para scope de proyecto — y la persona seleccionada sincroniza a Pi distinguiendo un campo legacy omitido de uno explícitamente vacío.

11 Aug 2026
github.com/Gentleman-Programming/gentle-ai →
🤖

gentle-ai

Gentleman-Programming
v2.4.0-rc.6
Beta

v2.4.0-rc.6 — Hotfix over rc.4

This candidate supersedes v2.4.0-rc.4, which was tagged and published but never carried binaries, so it never reached anyone. v2.4.0-rc.5 was burned by a tooling mistake on the maintainers' side and was never published. Two defects landed right in the path this candidate asks you to exercise.

  • A filesystem root is no longer answered as if it were a project: sdd-status --cwd / returned a successful, empty, entirely plausible status — changeName: null, artifactStore: openspec, planningHome: «/openspec». A phase-failure continuation that resolved its working directory to the drive root therefore read as «SDD lost my project» rather than «that command was pointed at the wrong directory». It now refuses and names the runnable continuation.
  • Engram-backed changes are closed by their archive report: a change that had ever persisted an artifact was reported active forever, because the two stores archive differently and only one leaves a trace the resolver reads — OpenSpec moves the directory out of changes/, Engram moves nothing. Archive already wrote sdd/{change}/archive-report and the title pattern did not recognize it, so the one artifact proving a change was finished was the one never read. Measured on a real store: thirty changes for a single project were reported active, seven of them archived weeks earlier. Naming an archived change still resolves it; only discovery excludes it.

Everything else is unchanged from rc.4 — see the entry below for the full detail on the attempt ledger, the review contract, and the defect handoff.

Install: go install github.com/gentleman-programming/gentle-ai/v2/cmd/[email protected], or download a binary from the release and verify it against SHA256SUMS.txt.

11 Aug 2026
github.com/Gentleman-Programming/gentle-ai →
Beta

v2.4.0-rc.4 — The attempt ledger (superseded by rc.6)

Published without binaries and superseded by rc.6 before it reached anyone — but here is the candidate's actual content, since rc.6 carries all of it. Where rc.1 made refusals name their exit and rc.3 bound the proof to the candidate you're delivering, this one turns to the surface neither covered: the SDD attempt ledger, where a refusal could be correct, name a real exit, and still leave the operator with nowhere to go. Everything stays within the 2.4.0 line and does not widen the public Go API.

  • Review acts after implementation, not during it: a passing implementation attempt was refused whenever the review binding covered the bytes from before the attempt — which it always does, because changing the candidate is what an attempt is for. That is review deciding whether implementation may finish. The one named exit demanded an approved review of the corrected candidate, and producing it opened a fresh correction budget and a fresh reviewer that the contract forbids after independent verification. Four doors, all locked.
  • The kill switch was a half-measure: unmanaged remediation required review to be off and no binding to exist, so a binding created before the operator turned review off kept blocking corrections. While review is off it does not exist, and a leftover binding is an implication. None of this weakens delivery: the gates re-derive their verdict from the candidate actually being delivered, so an unreviewed candidate is still refused at commit, push, PR and release. The binding stays recorded — review stops deciding, it does not stop being tracked.
  • The ledger stops contradicting itself: status reported next_action: begin while acquire blocked on the same request, because Begin evaluated its repository-side preconditions inside its mutation closure where no read-only surface could reach them. Both halves now run through one predicate.
  • Three refusals compared two values and disclosed neither: they now print both sides — the approved tree against the charged tree with a git diff between them, the bound revision against the current one, and the failure a correction names against the one the chain actually holds unremediated. One of them was telling operators their input was wrong when it was correct and merely obsolete.
  • An exhausted budget now asks: it used to end the conversation in prose naming a reset the operator had to assemble from six flags. It now presents the accounting up front plus a grant that runs verbatim. Attempts that never ran the work are named as such, because an exhausted budget means something different when none of it was spent on the candidate.
  • Negotiated transitions come from one authority: canonical STATUS target and recovery projection moved into reviewtransaction, so CLI adapters render a decision instead of reconstructing it. Effective review mode is resolved once, before STATUS publishes either eligibility or a transition, so a disabled clone stops being offered a review it cannot start.
  • The defect reporter stops filing other projects' bugs: the automated handoff asked whether the workflow appeared blocked by a Gentle AI defect, and from the operator's seat everything that blocks them appears to qualify. The test is now what produced the failure, not what the work was doing when it happened: a Gentle AI invocation producing it is the whole gate; a Gentle AI workflow merely hosting one is not.

Also in this candidate: OpenCode plugin upgrades verify the installed manifest instead of assuming the requested version materialized, Claude workspace MCP servers are written to .mcp.json — the file Claude Code actually reads for project scope — and the selected persona syncs to Pi, distinguishing an omitted legacy field from an explicit empty one.

11 Aug 2026
github.com/Gentleman-Programming/gentle-ai →
🤖

gentle-ai

Gentleman-Programming
v2.4.0-rc.6
Bêta

v2.4.0-rc.6 — Hotfix sur rc.4

Cette candidate remplace v2.4.0-rc.4, taguée et publiée mais sans binaires, donc jamais parvenue à personne. v2.4.0-rc.5 a été brûlée par une erreur d'outillage côté mainteneurs et n'a jamais été publiée. Deux défauts sont apparus précisément sur le chemin que cette candidate demande d'exercer.

  • Une racine de système de fichiers n'est plus traitée comme un projet : sdd-status --cwd / renvoyait un status réussi, vide et parfaitement plausible — changeName: null, artifactStore: openspec, planningHome: «/openspec». Une continuation de phase-failure dont le working directory se résolvait à la racine du disque se lisait donc comme « SDD a perdu mon projet » plutôt que « cette commande visait le mauvais répertoire ». Elle refuse désormais et nomme la continuation exécutable.
  • Les changements avec backend Engram sont clos par leur archive report : un changement ayant déjà persisté un artefact restait signalé actif indéfiniment, car les deux stores archivent différemment et un seul laisse une trace que le resolver lit — OpenSpec sort le répertoire de changes/, Engram ne déplace rien. L'archive écrivait déjà sdd/{change}/archive-report et le motif de titre ne le reconnaissait pas : le seul artefact prouvant qu'un changement était terminé était justement celui jamais lu. Mesuré sur un store réel : trente changements d'un même projet étaient signalés actifs, dont sept archivés des semaines plus tôt. Nommer un changement archivé le résout toujours ; seule la découverte l'exclut.

Tout le reste est identique à rc.4 — voir l'entrée ci-dessous pour le détail complet du ledger d'attempts, du contrat de revue et du handoff de défauts.

Installation : go install github.com/gentleman-programming/gentle-ai/v2/cmd/[email protected], ou téléchargez un binaire de la release et vérifiez-le contre SHA256SUMS.txt.

11 Aug 2026
github.com/Gentleman-Programming/gentle-ai →
Bêta

v2.4.0-rc.4 — Le ledger d'attempts (remplacée par rc.6)

Publiée sans binaires et remplacée par rc.6 avant d'atteindre quiconque — mais voici le contenu réel de la candidate, puisque rc.6 le reprend intégralement. Là où rc.1 faisait nommer leur sortie aux refus et rc.3 liait la preuve au candidat livré, celle-ci s'attaque à la surface qu'aucune des deux ne couvrait : le ledger d'attempts SDD, où un refus pouvait être correct, nommer une vraie sortie, et laisser malgré tout l'opérateur sans issue. Tout reste dans la ligne 2.4.0 et n'élargit pas l'API publique Go.

  • La revue agit après l'implémentation, pas pendant : un attempt réussi était refusé dès que le binding de revue couvrait les octets antérieurs à l'attempt — c'est-à-dire toujours, puisque modifier le candidat est la raison d'être d'un attempt. C'est la revue qui décide si l'implémentation peut se terminer. L'unique sortie nommée exigeait une revue approuvée du candidat corrigé, et la produire ouvrait un nouveau correction budget et un nouveau reviewer que le contrat interdit après la vérification indépendante. Quatre portes, toutes verrouillées.
  • Le kill switch était une demi-mesure : la remédiation unmanaged exigeait que la revue soit désactivée et qu'aucun binding n'existe, donc un binding créé avant la désactivation continuait de bloquer les corrections. Quand la revue est désactivée, elle n'existe pas, et un binding résiduel est une implication. Rien de tout cela n'affaiblit la livraison : les gates redérivent leur verdict du candidat réellement livré, donc un candidat non revu est toujours refusé au commit, push, PR et release. Le binding reste enregistré — la revue cesse de décider, pas d'être suivie.
  • Le ledger cesse de se contredire : status signalait next_action: begin alors qu'acquire bloquait la même requête, car Begin évaluait ses préconditions côté dépôt dans sa mutation closure, hors d'atteinte de toute surface read-only. Les deux moitiés passent désormais par un seul prédicat.
  • Trois refus comparaient deux valeurs sans en divulguer aucune : ils affichent désormais les deux côtés — l'arbre approuvé contre l'arbre facturé avec un git diff entre eux, la révision liée contre l'actuelle, et l'échec nommé par une correction contre celui que la chaîne détient réellement non remédié. L'un d'eux disait aux opérateurs que leur entrée était fausse alors qu'elle était correcte et seulement obsolète.
  • Un budget épuisé pose désormais la question : il terminait la conversation en prose en nommant un reset que l'opérateur devait assembler à partir de six flags. Il présente maintenant la comptabilité et un grant qui s'exécute tel quel. Les attempts n'ayant jamais exécuté le travail sont nommés comme tels, car un budget épuisé signifie autre chose quand rien n'a été dépensé sur le candidat.
  • Les transitions négociées proviennent d'une seule autorité : la cible canonique de STATUS et la projection de recovery ont été déplacées dans reviewtransaction, si bien que les adaptateurs CLI rendent une décision au lieu de la reconstruire. Le mode de revue effectif est résolu une seule fois, avant que STATUS publie éligibilité ou transition, donc un clone désactivé cesse de se voir proposer une revue qu'il ne peut pas démarrer.
  • Le rapporteur de défauts cesse de signaler les bugs des autres projets : le handoff automatisé demandait si le workflow semblait bloqué par un défaut Gentle AI, et depuis le siège de l'opérateur, tout ce qui bloque semble qualifier. Le test porte désormais sur ce qui a produit l'échec, non sur ce que le travail faisait à ce moment : une invocation Gentle AI qui le produit constitue tout le gate ; un workflow Gentle AI qui se contente d'en héberger une, non.

Aussi dans cette candidate : les upgrades du plugin OpenCode vérifient le manifeste installé au lieu de supposer que la version demandée s'est matérialisée, les MCP servers du workspace Claude sont écrits dans .mcp.json — le fichier que Claude Code lit réellement pour le scope projet — et la persona sélectionnée se synchronise vers Pi en distinguant un champ legacy omis d'un champ explicitement vide.

11 Aug 2026
github.com/Gentleman-Programming/gentle-ai →