Plan Linter (Validateur de la Porte 1)

Exécute la validation statique déterministe de la Porte 1 sur les bundles de tâches avant le développement, et suit la checklist de révision de la Porte 2. À utiliser lorsque des contrats de tâches existent sous tasks/ et que vous devez vérifier le périmètre d'impact, le budget de diff, la topologie des fichiers déclarés, les ancres de traçabilité, la couverture des ancres de spécification, les ADRs hérités, les critères d'acceptation vérifiables par machine et l'acyclicité du DAG. Ne pas utiliser pour l'exécution de code, la construction de pipelines CI, les vérifications AST/complexité ou les audits de test (relevant de quality-engineering).

Qu'est-ce que Plan Linter (Validateur de la Porte 1) ?

Cette compétence, le Plan Linter, est un validateur de la Porte 1 pour les contrats de tâches dans un processus de développement structuré. Elle exécute des vérifications statiques déterministes sur les bundles de tâches avant que le développement ne commence, garantissant que chaque tâche est correctement définie, a des dépendances acycliques et respecte les contraintes de budget. Elle assiste également la Porte 2, une révision sémantique manuelle, en fournissant une checklist et des heuristiques. Le Plan Linter fonctionne avec un script Python auto-suffisant (stdlib uniquement) et peut produire des rapports lisibles par machine ou humains. Il est conçu pour les développeurs et les agents d'IA utilisant des environnements comme Claude Code ou Cursor, où il automatise la validation pré-développement tout en déléguant le jugement sémantique à une révision humaine ou par prompt. Il prend en charge des vérifications de la topologie inverse, de la couverture des ancres de spécification et de l'acyclicité du DAG, et il s'intègre avec des changemements de spécification via --changes-dir. Il évite explicitement l'exécution de code, l'analyse de complexité et l'audit de tests, qui sont gérés par d'autres compétences.

Compatible avec~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 Productivité et collaboration skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait Plan Linter (Validateur de la Porte 1) ?

Cette compétence a une responsabilité unique et strictement délimitée : la validation statique déterministe de la Porte 1 des contrats et bundles de tâches prévus sous tasks/ avant le début du développement.

  • Porte 1 : un script déterministe dans cette compétence : rapide, hors ligne, stdlib uniquement.
  • Porte 2 : une révision sémantique par prompt uniquement (compétence review, avec references/gate-2-review.md en solution de repli).
  • Non-objectifs : plan-linter n'exécute PAS de code, ne construit ni n'exécute de pipelines CI, n'effectue PAS d'analyse AST/complexité de code et n'audite PAS les tests ni les preuves de complexité/QA enregistrées dans 03-qa-verification.md (seulement une vérification d'existence et un balayage des espaces réservés). Tous les pipelines CI et les portes de vérification sont gérés par quality-engineering ; les tests locaux sont gérés par qa.

Porte 1 : vérifications déterministes

VérificationPar défautRemplaçable
01-contract.md existe avec des métadonnées validesrequisnon
task_id est égal au nom du répertoirerequisnon
task_id est unique entre les bundlesrequisnon
nombre de touch_files1..3max_touch_files
estimated_lines50..250min_diff_lines, max_diff_lines
origin_spec_anchor correspond à #sec-[a-z0-9-]+requisrequire_anchor
adherence_adrs liste au moins un ADRrequisrequire_adrs
dod.type_check, dod.lint, dod.test_filerequisnon
nombre de dod.edge_casesau moins 2min_edge_cases
02-dev-workspace.md, 03-qa-verification.md, 04-process.md existentrequisrequire_docs
préfixes de touch interditstests/acceptance/forbidden_touch_prefixes
espaces réservés non résolus dans 01/02/03bloquantscan_placeholders
Preuves de QA au niveau du contenu de 03-qa-verification.mdpas audité (Porte 3)non
Topologie inverse : les chemins de modification existent, les chemins de création n'existent pasavertissementcheck_topology, strict_topology, --repo-root
size_class micro : change_id présent, 1 fichier touché, budget plus petitrequis lorsque micromicro_min_diff_lines, micro_max_touch_files
change_id a une proposition ouverte sous le répertoire de changementrequis lorsque --changes-dir est fourni--changes-dir
Matrice de couverture des ancres de spécification (sections non couvertes)rapport ; erreur avec --require-full-coverage--spec, --coverage-out
Ancres de contrat absentes de la spécificationavertissement ; erreur avec --strict-anchor--spec
Graphe de dépendancesacyclique, pas de tâches manquantesnon

Tout est vérifié ; l'ordre dans la sortie est stable.

Démarrage rapide

# Rapport standard ou JSON lisible par machine
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

# Configuration personnalisée ou format legacy
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

# Heuristiques de la Porte 2 et mode CI bloquant
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

Le script est optionnel. Si Python n'est pas disponible, utilisez references/gate-2-review.md comme checklist manuelle et révisez les mêmes champs à la main.

La Porte 2 est la compétence review séparée. Après que la Porte 1 se termine avec le code 0, utilisez la compétence review (mode plan-review) si elle est installée pour l'audit sémantique indépendant. Cette compétence conserve references/gate-2-review.md comme solution de repli autonome lorsque la compétence review n'est pas installée ; elle ne remplace jamais la Porte 1.

Codes de sortie

CodeSignification
0Porte 1 réussie pour chaque bundle de tâches
1Violations trouvées (ou un frontmatter de contrat ne peut pas être parsé)
2Erreur d'utilisation ou de configuration
3Erreur interne inattendue

Format du contrat

Le frontmatter YAML de 01-contract.md est faisant autorité. Les tableaux humains ci-dessous sont des aides à la lecture optionnelles.

---
task_id: task-001-auth
title: "Authentification utilisateur"
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:
    - "des identifiants vides renvoient 400"
    - "un jeton expiré renvoie 401"
---

Règles :

  • task_id doit être égal au nom du répertoire de la tâche ; les chemins sont relatifs au dépôt avec des barres obliques.
  • touch_files ne peut pas pointer vers des préfixes interdits (tests/acceptance/ par défaut).
  • Ne laissez pas d'espaces réservés ({{...}}, [TBD], TODO) dans 01/02/03.

Solution de repli legacy

Les contrats sans frontmatter YAML utilisent une solution de repli basée sur des tableaux pour les mises en page pré-v2, en affichant un avertissement LEGACY_FORMAT. Ajoutez --legacy pour forcer la solution de repli.

Configuration

{
  "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"]
}

Les seuils sont des conventions de dépôt, pas des lois universelles. Remplacez-les par projet ; les clés inconnues produisent un avertissement, tandis que les valeurs mal typées font sortir avec le code 2.

Sortie 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 est présent uniquement lorsque --spec est passé ; --coverage-out l'écrit dans un fichier.

Chaque objet d'erreur a les clés task, code, message, file et line. Les codes d'erreur sont des identifiants anglais stables (p. ex. 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). Les propositions archivées produisent CHANGE_ALREADY_ARCHIVED au lieu d'une erreur, et ignore_task_dirs (tasks/archive) ne sont jamais scannés comme bundles en attente. Référence complète des erreurs : references/gate-2-review.md.

Porte 2 : révision sémantique (prompt uniquement)

Après que la Porte 1 a réussi, suivez references/gate-2-review.md en tant que réviseur indépendant. Résumez comme :

  • Révision du plan Porte 2 réussie : 0 omissions, 0 hallucinations ; ou
  • Liste des constatations : répertoire de la tâche, champs contaminés et identifiants ADR violés.

La Porte 2 est manuelle : un script ne peut pas juger de la véracité sémantique. Ne passez pas sans avoir révisé.

Portabilité, limites et non-objectifs

Le script est stdlib uniquement, se résout par rapport à son propre répertoire et n'écrit jamais de fichiers.

Limites strictes et non-objectifs :

  • Pas d'exécution de code : n'exécute jamais les commandes de DoD, le code d'application ou les suites de tests.
  • Pas d'orchestration CI : ne construit, ne gère ni n'exécute de pipelines CI (géré par quality-engineering).
  • Pas d'analyse AST ou de complexité : ne calcule pas la complexité cyclomatique $V(G)$ (géré par quality-engineering).
  • Pas d'audit de test ou de vérification : n'audite pas les preuves QA de 03. Seulement la vérification d'existence des quatre documents et le balayage des espaces réservés non résolus touchent 03-qa-verification.md ; la complexité, la couverture des chemins de base et le MSI de mutation sont audités par la Porte 3 (quality-engineering/verification_linter.py).
  • Pas de jugement sémantique : ne juge pas la véracité sémantique (Porte 2 est une révision par prompt).
  • Pas d'application du RBAC : ne remplace pas l'audit RBAC basé sur git.

Références

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 associés