Skip to content

Merge develop into main: GT-590 runtime approval subject - #85

Merged
beyondnetPeru merged 2 commits into
mainfrom
develop
Aug 1, 2026
Merged

Merge develop into main: GT-590 runtime approval subject#85
beyondnetPeru merged 2 commits into
mainfrom
develop

Conversation

@beyondnetPeru

Copy link
Copy Markdown
Contributor

Promueve develop a main.

Qué lanza

#84 — GT-590: el expediente dice QUÉ se aprobó, no sólo que algo se aprobó. Una RuntimeApproval llevaba sólo skillId + intent, así que toda decisión tomada a través de una misma capacidad se veía igual — para el humano que concede y en el ledger que la registra. El sujeto (kind/ref/summary/confidence/payload) espeja ApprovalSubject del Core y hace la decisión atribuible a un objeto concreto.

Es opcional de extremo a extremo —los runtimes ya desplegados no lo envían y siguen funcionando— pero un sujeto presente y a medias se rechaza con 400 en vez de recortarse: un kind sin summary dejaría al humano decidiendo a ciegas mientras cree que ve el objeto. La cola HITL de AgentGovernanceMd3, que la pantalla declaraba como capacidad ausente del BFF, ya es real.

Verificado en CI con Postgres: Backend (build + test), Deploy (kind + Helm + smoke), Frontend (lint + typecheck + build) y Gap registry coherence en verde, con 34 tests nuevos incluidos los de persistencia (ida y vuelta del payload jsonb, relectura de una fila sin sujeto, coexistencia de dos aprobaciones sobre el mismo objeto).

Checks rojos conocidos, preexistentes en este tronco

Ninguno lo causa ni lo empeora esta promoción:

  • conform — falla en develop y en main desde 97916eb, que volvió obligatorio el checkout del Core y aborta con exit 1 cuando falta el secreto CORE_REPO_TOKEN. Ese secreto no está configurado en el repositorio, así que toda ejecución desde 2026-08-01T08:29 está en rojo.
  • Validate documentation — falla desde al menos 2026-07-25: las filas del registro en docs/audit/tracker-gaps-opportunities-tracking.md no respetan el orden BLOCKED → OPEN → DEFERRED → RESOLVED. El fichero es byte-idéntico entre main y develop.

🤖 Generated with Claude Code

beyondnetPeru and others added 2 commits August 1, 2026 09:03
…se aprobo (GT-590)

Hasta aqui una `RuntimeApproval` llevaba solo `skillId` + `intent`, asi que TODA
decision tomada a traves de una misma capacidad se veia igual: igual para el humano
que la concede e igual en el ledger que la registra. Eso basta para «puede ejecutarse
esta capacidad?» y no para «es ESTA la correspondencia correcta?» — que es la
pregunta que el Core empezo a enrutar por esta compuerta.

El sujeto se espeja del contrato del Core (`approval.port.ts`, `ApprovalSubject`) con
sus mismos nombres — `kind`/`ref`/`summary`/`confidence`/`payload` — y no se
reinterpreta. Renombrarlos haria que el dia que el contrato cambiara, el campo llegara
y se descartara en silencio.

Decisiones que el codigo no explica solo:

· TODO el sujeto es opcional: los runtimes ya desplegados no lo envian y no pueden
  romperse por esta ficha. Pero un sujeto PRESENTE y a medias se rechaza con 400 en
  vez de recortarse — un `kind` sin `summary` dejaria al humano decidiendo a ciegas
  mientras cree que ve el objeto, que es peor que no ver nada.
· El payload se valida como OBJETO JSON en el dominio, no en la base: un jsonb
  invalido reventaria en `SaveChanges` como un 500 opaco cuando lo cierto es que el
  cuerpo venia mal.
· `confidence` fuera de [0,1] no es «poco fiable», es que quien la emitio no habla de
  una probabilidad. Existe para DECIRLE al humano que ratifica una CONJETURA (GT-584),
  y la pantalla la muestra por eso.
· El indice de sujeto NO es unico, a diferencia del de `correlationId`: un mismo objeto
  puede volver a someterse tras un rechazo o una expiracion, y unificarlo convertiria
  un reintento legitimo en un error de base.
· Rehidratar no revalida. Revalidar haria que un endurecimiento posterior de las reglas
  volviera ilegibles filas historicas que fueron validas cuando se escribieron.
· La cola humana estrena DTO propio en vez de ampliar `RuntimeApprovalResponse`: aquel
  es el espejo del contrato de MAQUINA y solo lleva el veredicto. Quien concede necesita
  otra cosa — que capacidad, sobre que objeto, desde cuando espera y cuando vence.

`AgentGovernanceMd3` declaraba la cola HITL como capacidad ausente del BFF. Ya no lo
es: la pantalla la lista y decide sobre ella. Lo que sigue faltando —y ahora lo dice
con precision— es el registro de skills.

Verificado: `dotnet ef migrations has-pending-model-changes` confirma que el modelo y
el snapshot cuadran; 34 tests nuevos (79 de RuntimeApproval en verde); nx typecheck,
lint y build del front en verde. La suite completa pasa de 1066 a 1101 tests
superados, con los mismos 10 fallos que develop ya tiene sin Postgres local.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…-subject

GT-590: el expediente dice QUÉ se aprobó, no sólo que algo se aprobó
@beyondnetPeru
beyondnetPeru merged commit bf95ee3 into main Aug 1, 2026
8 of 10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant