Plan Linter (Validador de Planificación Gate 1)

Ejecuta la comprobación estática determinística Gate 1 en los paquetes de tareas antes de comenzar el desarrollo y sigue la lista de verificación de revisión Gate 2. Úsalo cuando existan contratos de tareas en `tasks/` y necesites verificar el radio de explosión, el presupuesto de diff, la topología de archivos declarados, los anclajes de trazabilidad, la cobertura de anclajes de especificaciones, los ADR heredados, los criterios de aceptación comprobables por máquina y la aciclicidad del DAG. No lo uses para ejecutar código, construir pipelines de CI, realizar análisis AST/complejidad o auditar pruebas (responsabilidad de quality-engineering).

¿Qué es Plan Linter (Validador de Planificación Gate 1)?

El skill Plan Linter (Validador de Planificación Gate 1) realiza la validación estática determinística de los contratos y paquetes de tareas planificados que residen en el directorio `tasks/`, antes de que comience el desarrollo. Es una herramienta rápida, offline y que solo utiliza la biblioteca estándar de Python, sin dependencias externas. Implementa dos puertas: la Gate 1 es un script determinístico que verifica 22 reglas, como la existencia y formato correcto de los metadatos de los contratos, los límites en el número de archivos tocados y líneas estimadas, la unicidad de los identificadores de tarea, la presencia de anclajes de especificación y ADR, la cobertura de anclajes en la especificación técnica, la aciclicidad del grafo de dependencias, y la ausencia de marcadores de posición sin resolver (placeholders). La Gate 2 es una revisión semántica manual guiada por un checklist en `references/gate-2-review.md`. El skill está diseñado para entornos de desarrollo donde los contratos de tareas siguen un formato YAML estricto con metadatos, y se usa típicamente con agentes como Claude Code, Cursor o Codex para garantizar que los planes cumplan con los estándares del repositorio antes de implementar cambios. No ejecuta código, no orquesta CI, ni audita pruebas, ya que esas responsabilidades pertenecen a otros skills.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/formal-you/agent-skills-suite/tree/HEAD/.agents/skills/plan-linter

Installed? Explore more Productividad y colaboración skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace Plan Linter (Validador de Planificación Gate 1)?

Este skill tiene una única responsabilidad estrictamente delimitada: validación estática determinística Gate 1 de los contratos y paquetes de tareas planificados bajo tasks/ antes de comenzar el desarrollo.

  • Gate 1 es un script determinístico en este skill: rápido, offline, solo con la biblioteca estándar.
  • Gate 2 es una revisión semántica solo con indicaciones (skill review, con references/gate-2-review.md como respaldo).
  • No objetivos: plan-linter NO ejecuta código, NO construye ni ejecuta pipelines de CI, NO realiza análisis AST/complejidad de código, y NO audita pruebas ni la evidencia de complejidad/mutación registrada en 03-qa-verification.md (solo escaneo de marcadores de posición y comprobaciones de existencia). Todos los pipelines de CI y puertas de verificación son propiedad de quality-engineering; las pruebas locales son propiedad de qa.

Puerta 1 (Gate 1): comprobaciones determinísticas

ComprobaciónValor por defectoSobrescribible
01-contract.md existe y tiene metadatos válidosrequeridono
task_id es igual al nombre del directoriorequeridono
task_id es único entre todos los paquetesrequeridono
Número de touch_files1..3max_touch_files
estimated_lines50..250min_diff_lines, max_diff_lines
origin_spec_anchor coincide con #sec-[a-z0-9-]+requeridorequire_anchor
adherence_adrs lista al menos un ADRrequeridorequire_adrs
dod.type_check, dod.lint, dod.test_filerequeridono
Número de dod.edge_casesal menos 2min_edge_cases
02-dev-workspace.md, 03-qa-verification.md, 04-process.md existenrequeridorequire_docs
Prefijos de touch prohibidostests/acceptance/forbidden_touch_prefixes
Marcadores de posición sin resolver en 01/02/03bloqueadoscan_placeholders
Evidencia de QA a nivel de contenido en 03-qa-verification.mdno auditada (Puerta 3)no
Topología inversa: rutas de modificar existen, rutas de crear noadvertenciacheck_topology, strict_topology, --repo-root
size_class micro: change_id presente, 1 archivo tocado, presupuesto menorrequerido cuando micromicro_min_diff_lines, micro_max_touch_files
change_id tiene una propuesta abierta bajo el directorio de cambiosrequerido cuando se da --changes-dir--changes-dir
Matriz de cobertura de anclajes de especificación (secciones descubiertas)informe; error con --require-full-coverage--spec, --coverage-out
Anclajes de contrato ausentes en la especificaciónadvertencia; error con --strict-anchor--spec
Grafo de dependenciasacíclico, sin tareas faltantesno

Todo se comprueba; el orden en la salida es estable.

Inicio rápido

# Informe estándar o JSON legible por máquina
python .agents/skills/plan-linter/scripts/plan_linter.py --tasks-dir ./tasks
python .agents/skills/plan-linter/scripts/plan_linter.py --tasks-dir ./tasks --json

# Configuración personalizada o formato heredado
python .agents/skills/plan-linter/scripts/plan_linter.py --tasks-dir ./tasks --config plan-linter.json
python .agents/skills/plan-linter/scripts/plan_linter.py --tasks-dir ./tasks --legacy

# Heurísticas de Gate 2 y modo CI bloqueante
python .agents/skills/plan-linter/scripts/plan_linter.py --tasks-dir ./tasks \
  --repo-root . --spec .specs/02-tech-spec.md --changes-dir .specs/changes --json
python .agents/skills/plan-linter/scripts/plan_linter.py --tasks-dir ./tasks \
  --spec .specs/02-tech-spec.md --strict-topology --strict-anchor --require-full-coverage

El script es opcional. Si Python no está disponible, usa references/gate-2-review.md como lista de verificación manual y revisa los mismos campos manualmente.

Gate 2 es el skill review separado. Después de que Gate 1 salga con 0, usa el skill review (modo plan-review) cuando esté instalado para la auditoría semántica independiente. Este skill mantiene references/gate-2-review.md como un respaldo autónomo cuando el skill review no está instalado; nunca reemplaza Gate 1.

Códigos de salida

CódigoSignificado
0Gate 1 pasó para cada paquete de tareas
1Se encontraron violaciones (o no se puede analizar el frontmatter de un contrato)
2Error de uso o configuración
3Error interno inesperado

Formato del contrato

El frontmatter YAML de 01-contract.md es la fuente autoritativa. Las tablas humanas debajo de él son ayudas de legibilidad opcionales.

---
task_id: task-001-auth
title: "Autenticación de usuario"
module: auth
dependencies: [task-000-bootstrap]
estimated_lines: 120
touch_files:
  - action: create
    path: src/auth/service.py
  - action: modify
    path: src/auth/routes.py
origin_spec_anchor: "#sec-auth"
adherence_adrs: [ADR-001]
dod:
  type_check: "npm run type-check"
  lint: "npm run lint"
  test_file: "tests/acceptance/test_auth.ts"
  edge_cases:
    - "credenciales vacías devuelven 400"
    - "token expirado devuelve 401"
---

Reglas:

  • task_id debe ser igual al nombre del directorio de la tarea; las rutas son relativas al repositorio con barras inclinadas.
  • touch_files no puede apuntar a prefijos prohibidos (tests/acceptance/ por defecto).
  • No dejes marcadores de posición ({{...}}, [TBD], TODO) en 01/02/03.

Respaldo heredado

Los contratos sin frontmatter YAML usan un respaldo basado en tabla para diseños previos a v2, imprimiendo una advertencia LEGACY_FORMAT. Añade --legacy para forzar el respaldo.

Configuración

{
  "max_touch_files": 3,
  "min_diff_lines": 50,
  "max_diff_lines": 250,
  "require_anchor": true,
  "require_adrs": true,
  "min_edge_cases": 2,
  "require_docs": ["02-dev-workspace.md", "03-qa-verification.md", "04-process.md"],
  "forbidden_touch_prefixes": ["tests/acceptance/"],
  "scan_placeholders": true,
  "micro_min_diff_lines": 10,
  "micro_max_touch_files": 1,
  "check_topology": true,
  "strict_topology": false,
  "ignore_task_dirs": ["archive"]
}

Los umbrales son convenciones del repositorio, no leyes universales. Sobrescríbelos por proyecto; las claves desconocidas producen una advertencia, mientras que los valores mal tipificados salen con código 2.

Salida JSON

{
  "gate": "1",
  "passed": true,
  "tasks_scanned": 3,
  "errors": [],
  "warnings": [],
  "coverage": {
    "spec": ".specs/02-tech-spec.md",
    "spec_anchors": 3,
    "covered": ["#sec-alpha", "#sec-beta"],
    "uncovered": ["#sec-gamma"],
    "contract_anchors_missing_from_spec": [],
    "coverage_ratio": 0.6667
  }
}

coverage solo está presente cuando se pasa --spec; --coverage-out lo escribe en un archivo.

Cada objeto de error tiene las claves task, code, message, file y line. Los códigos de error son identificadores en inglés estables (por ejemplo, MISSING_DOC, TASK_ID_MISMATCH, DAG_CYCLE, PLACEHOLDER, TOUCH_FILE_MISSING, FORBIDDEN_TOUCH_FILE, BDD_MISSING_PRECONDITION, BDD_MISSING_ACTION, BDD_MISSING_OUTCOME, BDD_INVALID_SCENARIO, SPEC_SECTION_UNCOVERED). Las propuestas archivadas producen CHANGE_ALREADY_ARCHIVED en lugar de un error, y ignore_task_dirs (tasks/archive) nunca se escanean como paquetes pendientes. Referencia completa de errores: references/gate-2-review.md.

Puerta 2 (Gate 2): revisión semántica (solo con indicaciones)

Después de que Gate 1 pase, sigue references/gate-2-review.md como un revisor independiente. Resume como:

  • Gate 2 Plan Review Passed: 0 omissions, 0 hallucinations; o
  • Lista de hallazgos: directorio de tarea, campos contaminados, e IDs de ADR violados.

Gate 2 es manual: un script no puede juzgar la veracidad semántica. No continúes a menos que se haya revisado.

Portabilidad, límites y no objetivos

El script solo usa la biblioteca estándar, resuelve rutas relativas a su propio directorio y nunca escribe archivos.

Límites estrictos y no objetivos:

  • Sin ejecución de código: nunca ejecuta comandos de DoD, código de aplicación o suites de pruebas.
  • Sin orquestación de CI: no construye, gestiona ni ejecuta pipelines de CI (responsabilidad de quality-engineering).
  • Sin análisis AST o de complejidad: no calcula complejidad ciclomática $V(G)$ (responsabilidad de quality-engineering).
  • Sin auditoría de pruebas o verificación: no audita la evidencia de QA en 03. Solo la comprobación de existencia de cuatro documentos y el escaneo de marcadores de posición sin resolver tocan 03-qa-verification.md; la complejidad, la cobertura de caminos base y el MSI de mutación son auditados por Gate 3 (quality-engineering/verification_linter.py).
  • Sin juicio semántico: no juzga la veracidad semántica (Gate 2 es revisión con indicaciones).
  • Sin control de RBAC: no reemplaza la auditoría RBAC basada en git.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

formal-you/agent-skills-suite

Run a bounded brownfield change (bugfix, small feature, behavior tweak) against an existing spec or codebase: proposal -> one task bundle -> dev/QA -> converge -> archive. Use when an existing spec or codebase needs an incremental change (bugfix, small feature, behavior tweak) and a full PRD is overkill. Do not use for greenfield requirements (use prd-generator), architecture decisions (use spec-generator), or pure task slicing (use task-decomposition).

formal-you/agent-skills-suite

Fold confirmed implementation deviations back into the technical spec after a task reaches QA_PASSED, archive the task bundle and close the change proposal. Use when a task bundle records a checked QA_PASSED verdict and its 02-dev-workspace.md deviation log is ready to be written back. Do not use while implementation or QA is still running, and do not use to invent spec content.

formal-you/agent-skills-suite

Implement one planned task bundle as the Dev role: read the contract, change only touch_files, run the machine-checkable DoD, fill 02-dev-workspace.md and hand off to QA. Use when a task contract exists and you are assigned implementation. Do not use for planning, task slicing, architecture, or QA verification.

formal-you/agent-skills-suite

Use on Windows for unexpected DSH sandbox access denials: workspace writes or listing fail, or an ordinarily readable path cannot be read. One bundled command inspects the path and every ancestor and repairs the ACL problems it proves in that same run. Expected confinement denials need no ACL repair.

Skills relacionados