Saltar a contenido

Configuración

.atipspec/config.yaml, escrito por init:

name: shop
language: es
approve_plan: true
review_rounds: 3
context_budget: 800
strict_scope: true
criteria_syntax: ears
strict_criteria: true
max_requirements: 5
max_tasks: 8
max_age_hours: 8
trust: optional
require_proof: false
require_isolated_review: false
exempt_paths: []
Clave Por defecto Significado
name nombre de la carpeta nombre del proyecto, mostrado por status
language en idioma en el que el modelo escribe los artefactos; en, es y pt también gobiernan el lint de criterios, los nombres de sección que acepta el parser y el dosier de aceptación. Otro código funciona con las tablas en inglés, y audit lo indica
approve_plan true solo entregas antiguas: atipspec build se niega hasta que se registra la aprobación propia del plan (accept <slug> plan). Una entrega guiada aprueba su plan con la propuesta, diga lo que diga esta clave
review_rounds 3 cuántas revisiones tiene una entrega por cada acuerdo aprobado, contando la primera, digan lo que digan las revisiones; las salidas dicen review N of M. atipspec review y atipspec run las cuentan y se detienen cuando se agotan; menos uno, también es el valor por defecto y el máximo que permite --max-rounds. La aprobación de una propuesta guiada la cubre; en una entrega antigua, ninguna aprobación lo hace. Consulta rondas de revisión
context_budget 800 líneas; atipspec context avisa por encima
strict_scope true un plan debe declarar su scope, y unos globs que juntos coinciden con todas las rutas (**, **/*, * con */**) no declaran ninguno; un fichero cambiado fuera de él es un error. Con false, un fichero fuera de un scope declarado es un warning y se permite un scope vacío
criteria_syntax ears ears señala los enunciados de criterio que no empiezan con un trigger ni llevan un shall; free desactiva solo esa comprobación
strict_criteria true las comprobaciones estrictas de la especificación son errores y bloquean la propuesta: la forma EARS, los términos vagos en requisitos, criterios y pasos de escenario, y el número en el criterio de un atributo de calidad. Con false son warnings. El consejo sobre valores concretos y métodos de medición es un warning en ambos casos; consulta escribir criterios
max_requirements 5 check avisa cuando una spec tiene más requisitos: una entrega debería caber en una jornada de trabajo
max_tasks 8 check avisa cuando un plan tiene más tareas
max_age_hours 8 check, status y el dosier avisan cuando el lead time de una entrega supera este valor: horas de reloj desde su creación (created, escrito por new) hasta la aceptación de su resultado, o hasta ahora mientras tanto. Un warning, nunca un bloqueo
require_proof false true: todo criterio bajo Tests: necesita una entrada en Proof: que nombre su test, y la verificación que lo ejecuta, un Report:; si falta, es un error que bloquea la propuesta. Una policy de confianza también puede activarlo, y entonces el proyecto no puede desactivarlo. Consulta build
require_isolated_review false true: una revisión con session: shared, o sin sesión, es un error en vez de un warning, como ya lo es con risk: high. Una policy de confianza también puede activarlo
trust optional required: el proyecto necesita una policy de confianza externa. Sin ella, check y merge-check están en rojo, accept rechaza todas las formas locales salvo contract, deliver se niega y run no arranca; proposal no muestra ningún código local. merge-check lo aplica cuando lo activa el head, la branch de destino o la base del merge, así que una branch no puede quitarlo para su propio merge, ni siquiera una que se bifurcó antes
exempt_paths [] globs de ficheros fuera de .atipspec/ que una branch puede cambiar sin que los cubra ninguna entrega, como ["docs/**", "*.md"]: ** cruza directorios, * y ? no. merge-check los lee del config.yaml de la branch de destino (la revisión --base), nunca de la branch que juzga, así que una branch no puede eximir sus propios cambios, y avisa en una branch que los cambia. Lo decide la persona. Ninguna aprobación lo hashea. Consulta merge-check
system sin definir ruta a un checkout del repositorio system. atipspec new fija su contract.md, y su glossary.md cuando lo tiene, en el commit actual del checkout, en el contracts.json de la entrega guiada, y el contexto de esa entrega los lee desde ahí; las entregas antiguas leen el checkout tal como está. Consulta varios repositorios

Solo name y language los gestiona atipspec init; edita el resto a mano. init --language en en un proyecto existente conserva las demás claves.

Todos los comandos salvo init validan primero las policies y se detienen con Invalid .atipspec/config.yaml: <key> must be ...: los booleanos son true o false, los números son enteros positivos (max_age_hours admite decimales, como 7.5), criteria_syntax es ears o free, trust es optional o required, y exempt_paths es una lista de globs. Una clave omitida toma su valor por defecto.

Los valores por defecto solo se aplican donde falta una clave. Los proyectos creados antes de 0.3.0 tienen strict_scope: false, strict_criteria: false y max_age_hours: 48 escritos explícitamente y los conservan; audit señala los dos primeros, e install --update lista todas las policies que difieren de los valores por defecto de esta versión sin editar el fichero. config.yaml, salvo exempt_paths, forma parte de lo que hashea la aprobación de una propuesta guiada: cámbialo cuando ninguna entrega guiada esté entre su propuesta y su resultado, o vuelve a presentar esas propuestas.

.atipspec/teams.json

Opcional, escrito a mano: las refs que lee el tablero del equipo, los owners de cada capacidad, los otros repositorios desde los que se fijan contratos, la branch de integración y la dirección del gestor de tickets. Consulta configuración del equipo. La aprobación de una propuesta guiada solo hashea los owners de su capacidad e integration, así que añadir refs, repositorios o ticket_url no anula ninguna aprobación.

.atipspec/adapter.json

Opcional, escrito a mano: el adaptador de proceso al que llama atipspec run, como {"schema": 1, "name": ..., "command": [...], "isolated_review": false}. El comando es un array argv, no código de shell. La aprobación de una propuesta guiada hashea el fichero. Consulta el adaptador de ejecución.

.atipspec/.gitignore

Creado por init; ignora tmp/, donde se escriben los paquetes de revisión y donde debe ir el Report: JUnit de un plan, como .atipspec/tmp/junit.xml. Todo lo demás bajo .atipspec/ está pensado para incluirse en commits: el contrato, las specs vivas, las entregas con su evidencia y sus revisiones, el archivo.

.claude/settings.json

Escrito o fusionado por init e install cuando Claude Code es un cliente: reglas ask para Bash(*atipspec accept *) y para Edit sobre .github/workflows/**, .gitlab-ci.yml y .claude/settings*.json, y reglas deny para Edit sobre los registros de aprobación, de evidencia, de rondas de revisión (review-rounds.json) y del archivo. Todas las demás claves y entradas se conservan. Consulta reglas de permisos de aprobación.

Entorno

Variable Efecto
NO_COLOR desactiva los colores en la salida de la terminal
TERM=dumb lo mismo
ATIPSPEC_TRUST_POLICY ruta de la policy de confianza externa; todos los comandos la usan, igual que --policy (consulta confianza de la organización)
ATIPSPEC_POLICY_SHA256 el SHA-256 que debe tener la policy, como --policy-sha256
ATIPSPEC_PR_NUMBER el pull request que lee una policy en modo provider, como --number
GITHUB_TOKEN, GITLAB_TOKEN tokens de solo lectura de los adaptadores de proveedor, solo en el worker protegido; verify los elimina, junto con el agente SSH y los tokens de los jobs de CI y de OIDC, de los comandos que ejecuta
CLAUDECODE, CODEX_SANDBOX, CODEX_THREAD_ID, COPILOT_CLI, CURSOR_AGENT, GEMINI_CLI, AI_AGENT los definen los agentes de programación; accept nunca registra el canal terminal mientras haya uno definido, ni client-permission mientras uno nombre a un agente distinto de Claude Code (los valores 0, false, no y off se ignoran)
CLAUDE_CODE_ENTRYPOINT lo define Claude Code; sdk-ts y sdk-py (el Agent SDK) y sdk-cli (claude -p) hacen que accept registre el canal assistant

Confianza de la organización

La configuración local del proyecto guía al asistente; no puede relajar la aceptación de confianza. approve_plan: false se salta la aprobación del plan de una entrega antigua, no el requisito de aprobación de ingeniería de confianza. La policy TOML externa controla los roles, las claves públicas, las reglas corporativas y las identidades de proveedor. Debe vivir fuera del candidato. Sus require_proof y require_isolated_review se suman a los del proyecto: la puerta aplica un requisito cuando cualquiera de los dos lo pone a true. Su clave opcional integration, un nombre de ref completo como refs/remotes/origin/main, nombra la branch cuyo historial cuenta como integrado, de modo que lo que una entrega trae desde ella no es cambio de la entrega en check, en el paquete de revisión ni en el dosier; bajo una policy, el integration de teams.json no nombra ninguna branch, aunque las aprobaciones lo sigan hasheando. Consulta cuando main avanza. En modo provider (solo GitHub), su bloque [attestation] nombra el workflow de evidencia de confianza, signer_workflow, en otro repositorio de la misma organización, y fija su commit, signer_digest; una policy sin ellos no se carga. Consulta dos modos de confianza.

ATIPSPEC_TRUST_POLICY selecciona esa policy; ATIPSPEC_POLICY_SHA256 fija su contenido. Usa configuración protegida de la organización, no valores proporcionados por el proyecto. Los adaptadores de GitHub/GitLab usan GITHUB_TOKEN / GITLAB_TOKEN de solo lectura en el recolector de confianza. El runner de verificación elimina esas credenciales de los entornos de los comandos. Consulta aceptación empresarial.