ORACLEFACTORY Código abierto

PERSONAS / AGENTES / DECISIONES

Quién decide,
en cada cambio.

Un cambio pasa por cuatro decisiones: aceptar el alcance, elegir cómo se mide cada requisito, registrar la revisión y cerrar. El modo de trabajo dice cuáles toma una persona y cuáles puede tomar un agente. En ningún modo se pierde el rastro: cada decisión queda a nombre de quien la tomó, como persona o como agente.

Factory 0.1.0a12Tres modosUna persona siempre puede decidir

LOS TRES MODOS

Cuánto decide una persona.

confirmacion es el modo por defecto. El agente trabaja y propone la spec, las medidas y la revisión, y una persona las confirma desde su terminal; el cierre no se propone: lo toma una persona directamente. Conviene cuando se empieza, cuando el producto importa o cuando todavía no se conoce bien al agente.

funcional: la persona decide lo que el producto le promete a quien lo usa, los requisitos funcionales. El agente decide solo lo no funcional: rendimiento, mantenimiento, cómo se mide por dentro. Conviene cuando la persona quiere estar en el qué y no en cada detalle del cómo.

autonomo: el agente decide todo, también el cierre, y queda registrado como agente. Conviene para tareas acotadas y reversibles, o para probar el recorrido. Una persona puede intervenir igual cuando quiera.

Un cambio toma el modo del proyecto (modo_por_defecto en .factory/config.json) o el que se elige al crearlo:

oracle-factory nuevo --capacidad notas --modo funcional "Guardar notas"

QUIÉN DECIDE QUÉ

Lo que puede hacer un agente.

La tabla dice qué pasa cuando un agente toma cada decisión (con --agente), según el modo. Una persona en su terminal decide siempre, en cualquier modo.

Decisiónconfirmacionfuncionalautonomo
Aceptar la propuesta y la spec (el cambio tiene algún requisito funcional)el agente propone; una persona confirmasólo una personadecide el agente
Aceptar la propuesta y la spec (todos sus requisitos son no funcionales)el agente propone; una persona confirmadecide el agentedecide el agente
Elegir las medidas de un requisito funcionalel agente propone; una persona confirmasólo una personadecide el agente
Elegir las medidas de un requisito no funcionalel agente propone; una persona confirmadecide el agentedecide el agente
Registrar la revisión (el cambio tiene algún requisito funcional)el agente propone; una persona confirmasólo una personadecide el agente
Registrar la revisión (todos sus requisitos son no funcionales)el agente propone; una persona confirmadecide el agentedecide el agente
Cerrar el cambiosólo una personasólo una personadecide el agente

El agente propone; una persona confirma: lo que hizo el agente queda como propuesta y no cuenta hasta que una persona lo confirma, con el mismo comando sin --agente (las medidas, con oracle-factory medir ID --confirmar). Sólo una persona: el comando con --agente falla y dice por qué. Decide el agente: la decisión cuenta, a nombre del agente.

Abandonar un cambio (oracle-factory abandonar ID) lo decide siempre una persona; un agente sólo puede proponer el motivo.

FUNCIONAL O NO

Cada requisito dice qué es.

En la spec, cada requisito declara su tipo en la línea que sigue al título: Tipo: funcional o Tipo: no funcional. Uno sin esa línea cuenta como funcional, que es el lado seguro: en modo funcional lo decide una persona.

### Requirement: guardar una nota
Tipo: funcional

Si el proyecto pone "tipos_obligatorios": true en .factory/config.json, oracle-factory importar rechaza la spec mientras algún requisito no declare su tipo.

LEER ESTADO

Quién decidió, quién propuso, quién confirmó.

oracle-factory estado ID muestra, junto a cada decisión tomada, quién la tomó y cómo, y entre lo pendiente, lo que un agente propuso y todavía no cuenta (un fragmento, en el orden en que sale):

Pendiente: medidas de cli_c28628c0586fe682a.medir_dice_que_medidas_reemplaza propuestas por claude-code, sin confirmar por una persona
Aprobación spec: sí, Ana Pérez (persona, decidio, modo confirmacion)
Revisión registrada por: Ana Pérez (persona, confirmo, modo confirmacion; motivo: …)
Medidas de cli_c28628c0586fe682a.la_plantilla_de_un_cambio_nuevo_trae_la_forma_de_openspec: Ana Pérez (persona, confirmo, modo confirmacion)

Entre paréntesis van tres datos. Quién: persona (alguien en una terminal interactiva, con el nombre de su configuración de Git, o su usuario del sistema si Git no tiene nombre) o agente (el nombre que se pasó a --agente). Cómo: decidio (tomó la decisión directamente) o confirmo (una persona confirmó, tal cual, lo que había propuesto un agente). Y en qué modo estaba el cambio, con el motivo si lo hubo.

Una propuesta de un agente no figura como decisión: aparece en «Pendiente», con quién la propuso, y entre los eventos del registro del cambio, con forma propuso. Cuando una persona la confirma, pasa a ser una decisión «persona, confirmo».

oracle-factory estado ID --json da lo mismo para un programa: en decisiones, cada decisión tomada con su actor, tipo de actor, forma, modo, fecha y motivo; en requisitos, la propuesta de medidas que espera confirmación.

CAMBIAR DE MODO

Subir es fácil; bajar lo decide una persona.

oracle-factory modo ID funcional

Subir la intervención humana, por ejemplo de autonomo a confirmacion, lo puede hacer cualquiera. Bajarla lo decide una persona desde su terminal, con confirmación, nunca un agente. Al cambiar de modo, lo que un agente decidió y que en el modo nuevo ya no le corresponde deja de contar: vuelve a ser una propuesta, o se descarta para que lo decida una persona.

UN EJEMPLO REAL

Factory, hecha con Factory.

Factory se construye a sí misma en modo confirmacion. En cada cambio, el agente de código escribe la propuesta, implementa, propone las medidas, pide revisiones a otros modelos y propone aprobar la revisión con un motivo. Una persona hace lo que la tabla le reserva: aprueba la spec, confirma las medidas, registra la revisión eligiendo el motivo y cierra. En estado queda, para cada decisión, «persona, confirmo» o «persona, decidio», y entre los eventos del cambio, cada propuesta del agente.

El piloto con agentes que cuenta la página En equipo es anterior a los modos: ahí un agente coordinador hizo de personas, así que no muestra esto.

LÍMITES

Un protocolo, no un control de acceso.

Factory no autentica a nadie. «Persona» quiere decir que el comando corrió en una terminal interactiva sin --agente, y el nombre es el de la configuración de Git de esa terminal, o el usuario del sistema si Git no tiene nombre. Un agente con una terminal interactiva que omitiera --agente quedaría registrado como persona: los modos son un acuerdo entre quienes trabajan juntos.

Una entrada por tubería, sin terminal, no cuenta como persona: queda «sin identificar» y no puede decidir. Y el modo dice quién decide, no si la decisión es buena: eso sigue siendo de la revisión y de las medidas.

La referencia completa está en docs/modos.md.

Volver a la portada