TU PRIMER CAMBIO / PASO A PASO
Factory,
desde cero.
Instalá el kit, acordá un comportamiento y recorré la prueba de concepto (POC) hasta el cierre. Vas a comprobar una regla pequeña: una nota necesita un título con texto.
ANTES DE EMPEZAR
Qué vamos a usar.
Una terminal es una ventana para escribir comandos. En Windows abrí PowerShell desde Inicio; en macOS buscá Terminal; en Linux buscá Terminal en tus aplicaciones. Pegá una línea, presioná Enter y esperá a que termine antes de seguir.
uv instala las herramientas y administra Python, el lenguaje en que están hechas. PyPI es el catálogo desde el que se descargan esos paquetes. Git conserva versiones de los archivos. También necesitás un editor de texto plano; no uses un procesador de textos como Word.
Oracle 0.38.1 y Trackertast 0.1.0 están en PyPI. Factory ofrece un paquete alpha en su release de GitHub, preparado para publicación en PyPI. Esta guía usa el checkout, que incluye todos los archivos del ejemplo.
El ejemplo trae un programa mínimo ya escrito; Factory aún no genera esa implementación automáticamente. No construye aquí una app completa: sirve para aprender el flujo sobre una regla pequeña. La CLI instalada permite seleccionar otro proyecto con --proyecto; en esta guía trabajamos dentro del checkout descargado.
En Windows, activá “Extensiones de nombre de archivo” en el Explorador. Así podés evitar guardar un archivo como spec.md.txt cuando debe llamarse spec.md.
PASO 01
Instalá las herramientas.
Primero instalá Git para tu sistema. Luego instalá uv con el comando que corresponda. Estos comandos provienen de la guía oficial de uv.
Windows · PowerShell
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"macOS o Linux · Terminal
curl -LsSf https://astral.sh/uv/install.sh | shCerrá y volvé a abrir la terminal. Comprobá que ambos comandos estén disponibles:
uv --version
git --versionInstalá Python y las versiones del kit con las que se verificó esta guía. uv tool install guarda cada herramienta en su propio entorno.
uv python install 3.13
uv tool install --python 3.13 oracle-metalenguaje==0.38.1
uv tool install --python 3.13 trackertast==0.1.0
uv tool update-shellVolvé a abrir la terminal y verificá las herramientas:
oracle --version
tasks --versionLos nombres del paquete y del comando pueden ser distintos: oracle-metalenguaje instala oracle; trackertast instala tasks. Consultá las versiones en PyPI: Oracle y PyPI: Trackertast.
PASO 02
Descargá la POC de Factory.
Elegí una carpeta de trabajo, abrí la terminal allí y descargá el proyecto. Git crea una carpeta nueva llamada oracle-factory; el segundo comando entra en ella.
git clone https://github.com/Segtem/oracle-factory.git
cd oracle-factory
git switch -c demo/notasLa rama demo/notas es tu espacio para esta prueba. Todos los comandos siguientes se ejecutan dentro de oracle-factory.
uv run --no-project --python 3.13 python fabrica.py --helpDeberías ver los comandos nuevo, aprobar-spec, importar, revision, juzgar y cerrar. No hace falta activar un entorno ni instalar Python por separado: uv lo selecciona para cada ejecución.
PASO 03
Abrí tu primer cambio.
uv run --no-project --python 3.13 python fabrica.py nuevo --capacidad notas "Comprobar el título de una nota"Factory imprime el id del cambio y las carpetas creadas. El id identifica esa tarea: copialo completo, sin inventarlo ni abreviarlo para esta CLI.
Los comandos siguientes usan ID_DEL_CAMBIO hasta que lo ingreses.
Tu tarea vive en tareas/ID_DEL_CAMBIO/TAREA.md. El acuerdo vive en openspec/changes/ID_DEL_CAMBIO/.
PASO 04
Leé, acordá y elegí las medidas.
Abrí la carpeta del proyecto con tu editor. Copiá el contenido de examples/notas/proposal.md sobre el archivo proposal.md del cambio. Copiá examples/notas/spec.md sobre specs/notas/spec.md de ese mismo cambio. Son documentos completos incluidos en el repositorio.
El acuerdo que vas a revisar
# Capability: notas
## ADDED Requirements
### Requirement: titulo valido
The system SHALL reject empty or whitespace-only titles and accept titles containing text.
#### Scenario: título vacío
- WHEN el título es una cadena vacía
- THEN no se puede guardar la nota
#### Scenario: título con espacios
- WHEN el título contiene solo espacios
- THEN no se puede guardar la nota
#### Scenario: título con texto
- WHEN el título es Mi nota
- THEN se puede guardar la nota
Revisá los tres casos: título vacío, solo espacios y texto válido. Si ese comportamiento representa lo que querés, ejecutá:
uv run --no-project --python 3.13 python fabrica.py aprobar-spec ID_DEL_CAMBIOEl comando muestra la propuesta y el acuerdo. La terminal te pide escribir una frase de confirmación. Hacelo solo después de leerlos. Ahora importá sus requisitos:
uv run --no-project --python 3.13 python fabrica.py importar ID_DEL_CAMBIOOracle crea un archivo .requisito dentro de requisitos/. Su id completo aparece en la salida. Al principio queda SIN MEDIR: todavía no elegiste cómo comprobarlo.
Creá la carpeta catalogos si no existe. Copiá allí los dos archivos .oracle de examples/notas/catalogos/. Uno comprueba los resultados y otro que se hayan observado tres casos. Leé su contenido; las reglas declaran sus límites.
Abrí el archivo .requisito que acaba de generarse. Conservá su id, texto y fuente. Sustituí únicamente la línea que empieza con sin_medir por esta línea, con cuatro espacios al comienzo:
medido_por notas.casos_ejecutados, notas.resultadosoracle cobertura --proyecto .Tu requisito debe aparecer con ✓. Otros requisitos de la POC pueden seguir sin medir. Este enlace declara que las medidas representan los tres casos de tu acuerdo; no afirma que prueben cualquier comportamiento posible.
PASO 05
Probá el programa y registrá lo que pasó.
La implementación del ejemplo está en examples/notas/notas.py. Leela con el editor. Las pruebas comprueban los tres casos; el sensor ejecuta el programa y guarda sus resultados como datos para Oracle.
uv run --no-project --python 3.13 python -m unittest discover -s examples/notas -p "test_*.py" -vuv run --no-project --python 3.13 python examples/notas/sensor.py --salida .factory-demo/hechos.jsonEsperamos tres pruebas aprobadas y un archivo .factory-demo/hechos.json con tres observaciones. Esa carpeta de salida está excluida de Git; Oracle verificará los hechos por su propia huella.
Antes de revisar, guardá la versión de trabajo. Un commit es una fotografía de los archivos elegidos. Si Git todavía no conoce tu identidad, configurala solo para esta carpeta, reemplazando los datos:
git config user.name "Tu nombre"
git config user.email "tu-correo@example.com"git add .
git commit -m "ID_DEL_CAMBIO: ejemplo de notas"Terminá los cambios al código, documentos y medidas antes de la revisión. Si modificás el producto o creás otro commit después, las comprobaciones anteriores quedan desactualizadas.
PASO 06
Revisá el cambio y dejá un informe.
Revisá el programa y las pruebas, o pedí una revisión asistida. Guardá el informe real en .factory-demo/review.md con lo que se comprobó, los hallazgos y cómo se resolvieron. Clue aún no ejecuta esta revisión automáticamente.
Si quedan problemas, corregilos, repetí las pruebas y el comando del sensor del paso 5 para renovar los hechos; después creá el commit corregido. Cuando una persona decida aprobar la revisión y no queden hallazgos abiertos, registrala:
uv run --no-project --python 3.13 python fabrica.py revision ID_DEL_CAMBIO --informe .factory-demo/review.md --revisor "Tu nombre" --decision aprobar --hallazgos-abiertos 0Reemplazá “Tu nombre” por el de quien revisó. La terminal solicita una confirmación. El informe se conserva ligado a la versión del producto revisada.
PASO 07
Evaluá la evidencia y decidí el cierre.
uv run --no-project --python 3.13 python fabrica.py juzgar ID_DEL_CAMBIO --con .factory-demo/hechos.jsonuv run --no-project --python 3.13 python fabrica.py estado ID_DEL_CAMBIOSi las reglas se cumplen, el estado deja el cambio listo para la decisión final. Si falta evidencia, hay un resultado rojo o cambió la versión revisada, Factory explica qué hay que renovar. Un “verde” se refiere a estas medidas y estos hechos.
uv run --no-project --python 3.13 python fabrica.py cerrar ID_DEL_CAMBIORevisá los informes antes de confirmar. El cierre deja la tarea marcada como cerrada. La guía termina con un cambio local trazable; no publica una app ni envía tus cambios a GitHub.
Volver a ver el recorridoSI ALGO NO FUNCIONA
Volvé al punto que necesita atención.
La terminal no encuentra uv, oracle o tasks
Cerrá y abrí otra terminal después de instalar. Para oracle y tasks ejecutá uv tool update-shell y abrí otra sesión. Comprobá que la instalación anterior haya terminado sin errores.
Factory dice que todavía hay TODO
Estás aprobando los documentos iniciales sin completar. Revisá las rutas del cambio que imprimió nuevo, y comprobá que hayas copiado los documentos del ejemplo dentro de ese cambio.
El requisito sigue SIN MEDIR o el juicio no pasa
Confirmá que editaste el requisito del id que devolvió tu importación y que copiaste ambos archivos a catalogos/. Ejecutá oracle cobertura --proyecto . y leé su resultado. Un archivo mal formado se corrige antes de seguir.
La revisión o el juicio quedó desactualizado
El commit, los archivos o la evidencia cambiaron. Terminá los cambios, revisá la nueva versión, registrá otro informe y volvé a juzgar. Renovar la aprobación del acuerdo reinicia también la importación y sus validaciones.
Quiero aplicar Factory a otro proyecto
Instalá el wheel alpha del release de GitHub con uv. Luego usá oracle-factory --proyecto ./mi-proyecto init y oracle-factory --proyecto ./mi-proyecto ejemplo notas. La opción va antes del subcomando. Oracle y Trackertast se instalan como dependencias; no hace falta copiar Factory dentro del proyecto. Consultá los comandos de instalación en el README del release.