Plan-Linter (Gate 1 Planungsprüfung)

Führt die deterministische statische Prüfung (Gate 1) für Aufgabenpakete aus, bevor mit der Entwicklung begonnen wird, und enthält eine Checkliste für die manuelle Überprüfung (Gate 2). Einsetzbar, wenn Aufgabenverträge unter `tasks/` existieren und Blast Radius, Diff-Budget, deklarierte Dateitopologie, Rückverfolgbarkeitsanker, Spezifikationsanker-Abdeckung, übernommene ADRs, maschinenprüfbare Akzeptanzkriterien und DAG-Zyklenfreiheit geprüft werden müssen.

Was ist Plan-Linter (Gate 1 Planungsprüfung)?

Der Plan-Linter ist ein AI-Agenten-Fertigkeit zur deterministischen statischen Validierung von Aufgabenverträgen und -paketen in einem Repository, bevor Entwicklungsarbeit beginnt (Gate 1). Die Fertigkeit führt eine Reihe von Prüfungen durch, darunter die Existenz und Validität von Metadaten, die Eindeutigkeit von Aufgaben-IDs, die Anzahl der Touch-Dateien, die geschätzten Diff-Zeilen, die Übereinstimmung mit Spezifikationsankern, die Einhaltung von ADRs und die Zyklenfreiheit des Abhängigkeitsgraphen. Sie unterstützt Plattformen wie Claude Code, Cursor und jeden anderen KI-gestützten Agenten, der Python-Skripte ausführen und Task-Contracts verwalten kann. Der Linter ist als schnelles, offline-fähiges und stdlib-only Python-Skript implementiert und gibt strukturierte JSON- oder menschenlesbare Berichte aus. Die Fertigkeit enthält außerdem eine Referenz für die manuelle semantische Überprüfung (Gate 2), die nicht automatisiert werden kann, sowie eine vollständige Konfiguration über JSON, die projektübergreifend überschrieben werden kann.

Funktioniert mit~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 Produktivität & Zusammenarbeit skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Plan-Linter (Gate-1 Planungsprüfer)

Diese Fertigkeit hat eine einzige, streng abgegrenzte Verantwortung: Gate-1 deterministische statische Validierung von geplanten Aufgabenverträgen und Paketen unter tasks/ vor Entwicklungsbeginn.

  • Gate 1 ist ein deterministisches Skript in dieser Fertigkeit: schnell, offline, nur Stdlib.
  • Gate 2 ist eine reine Prompt-basierte semantische Überprüfung (review-Fertigkeit, mit references/gate-2-review.md als Fallback).
  • Nicht-Ziele: Der Plan-Linter führt KEINEN Code aus, baut KEINE CI-Pipelines auf, führt KEINE AST-/Code-Komplexitätsanalyse durch und prüft KEINE Tests oder die QA-Komplexitäts-/Mutationsnachweise, die in 03-qa-verification.md festgehalten sind (nur Platzhalter-Scan und Existenzprüfung). Alle CI-Pipelines und Verifikationsgatter gehören zu quality-engineering; lokale Tests gehören zu qa.

Gate 1: Deterministische Prüfungen

PrüfungStandardÜberschreibbar
01-contract.md existiert und hat gültige Metadatenerforderlichnein
task_id entspricht dem Verzeichnisnamenerforderlichnein
task_id ist eindeutig über alle Pakete hinwegerforderlichnein
Anzahl der touch_files1..3max_touch_files
Geschätzte Zeilen50..250min_diff_lines, max_diff_lines
origin_spec_anchor entspricht #sec-[a-z0-9-]+erforderlichrequire_anchor
adherence_adrs listet mindestens eine ADR auferforderlichrequire_adrs
dod.type_check, dod.lint, dod.test_fileerforderlichnein
Anzahl der dod.edge_casesmindestens 2min_edge_cases
02-dev-workspace.md, 03-qa-verification.md, 04-process.md existierenerforderlichrequire_docs
Verbotene Touch-Präfixetests/acceptance/forbidden_touch_prefixes
Unaufgelöste Platzhalter in 01/02/03blockiertscan_placeholders
Inhaltliche QA-Nachweise in 03-qa-verification.mdnicht geprüft (Gate 3)nein
Reverse-Topologie: Ändern-Pfade existieren, Erstellen-Pfade existieren nichtWarnungcheck_topology, strict_topology, --repo-root
Größenklasse Mikro: change_id vorhanden, 1 Touch-Datei, kleineres Budgeterforderlich bei Mikromicro_min_diff_lines, micro_max_touch_files
change_id hat einen offenen Vorschlag im Change-Verzeichniserforderlich, wenn --changes-dir angegeben--changes-dir
Spezifikationsanker-Abdeckungsmatrix (nicht abgedeckte Abschnitte)Bericht; Fehler mit --require-full-coverage--spec, --coverage-out
Vertragsanker, die in der Spezifikation fehlenWarnung; Fehler mit --strict-anchor--spec
Abhängigkeitsgraphazyklisch, keine fehlenden Aufgabennein

Alles wird geprüft; die Reihenfolge in der Ausgabe ist stabil.

Kurzanleitung

# Standardbericht oder maschinenlesbares JSON
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

# Benutzerdefinierte Konfiguration oder Legacy-Format
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

# Gate-2-Heuristiken und blockierender CI-Modus
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

Das Skript ist optional. Falls Python nicht verfügbar ist, verwenden Sie references/gate-2-review.md als manuelle Checkliste und prüfen Sie dieselben Felder manuell.

Gate 2 ist die separate review-Fertigkeit. Nachdem Gate 1 mit 0 beendet wurde, verwenden Sie die review-Fertigkeit (Plan-Review-Modus), wenn sie installiert ist, für die unabhängige semantische Prüfung. Diese Fertigkeit behält references/gate-2-review.md als eigenständigen Fallback, wenn die Review-Fertigkeit nicht installiert ist; sie ersetzt Gate 1 nie.

Exit-Codes

CodeBedeutung
0Gate 1 bestanden für jedes Aufgabenpaket
1Verstöße gefunden (oder ein Vertrags-Frontmatter kann nicht geparst werden)
2Verwendungs- oder Konfigurationsfehler
3Unerwarteter interner Fehler

Vertragsformat

Das YAML-Frontmatter von 01-contract.md ist verbindlich. Die darunterliegenden menschlichen Tabellen sind optionale Lesbarkeitshilfen.

---
task_id: task-001-auth
title: "Benutzerauthentifizierung"
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:
    - "leere Anmeldedaten geben 400 zurück"
    - "abgelaufener Token gibt 401 zurück"
---

Regeln:

  • task_id muss dem Aufgabenverzeichnisnamen entsprechen; Pfade sind Repository-relativ mit normalen Schrägstrichen.
  • touch_files dürfen nicht auf verbotene Präfixe zeigen (standardmäßig tests/acceptance/).
  • Lassen Sie keine Platzhalter ({{...}}, [TBD], TODO) in 01/02/03 zurück.

Legacy-Fallback

Verträge ohne YAML-Frontmatter verwenden einen Tabellen-Fallback für Pre-v2-Layouts und geben eine LEGACY_FORMAT-Warnung aus. Fügen Sie --legacy hinzu, um den Fallback zu erzwingen.

Konfiguration

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

Die Schwellenwerte sind Repository-Konventionen, keine universellen Gesetze. Überschreiben Sie sie projektweise; unbekannte Schlüssel erzeugen eine Warnung, falsch typisierte Werte führen zu Exit 2.

JSON-Ausgabe

{
  "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 ist nur vorhanden, wenn --spec übergeben wird; --coverage-out schreibt es in eine Datei.

Jedes Fehlerobjekt hat die Schlüssel task, code, message, file und line. Fehlercodes sind stabile englische Bezeichner (z.B. 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). Archivierte Vorschläge erzeugen CHANGE_ALREADY_ARCHIVED anstelle eines Fehlers, und ignore_task_dirs (tasks/archive) werden niemals als ausstehende Pakete gescannt. Vollständige Fehlerreferenz: references/gate-2-review.md.

Gate 2: Semantische Überprüfung (nur Prompt)

Nachdem Gate 1 bestanden ist, folgen Sie references/gate-2-review.md als unabhängiger Prüfer. Fassen Sie zusammen als entweder:

  • Gate 2 Plan Review Bestanden: 0 Auslassungen, 0 Halluzinationen; oder
  • Fundliste: Aufgabenverzeichnis, kontaminierte Felder und verletzte ADR-IDs.

Gate 2 ist manuell: Ein Skript kann keine semantische Wahrhaftigkeit beurteilen. Nicht bestehen, ohne dass die Überprüfung durchgeführt wurde.

Portabilität, Grenzen und Nicht-Ziele

Das Skript verwendet nur die Stdlib, löst Pfade relativ zu seinem eigenen Verzeichnis auf und schreibt niemals Dateien.

Strenge Grenzen und Nicht-Ziele:

  • Keine Codeausführung: Führt niemals DoD-Befehle, Anwendungscode oder Testsuiten aus.
  • Keine CI-Orchestrierung: Baut keine CI-Pipelines auf, verwaltet sie nicht und führt sie nicht aus (gehört zu quality-engineering).
  • Keine AST- oder Komplexitätsanalyse: Berechnet keine zyklomatische Komplexität $V(G)$ (gehört zu quality-engineering).
  • Keine Test- oder Verifikationsprüfung: Prüft keine QA-Nachweise aus 03. Nur die Existenzprüfung der vier Dokumente und der Scan auf unaufgelöste Platzhalter berühren 03-qa-verification.md; Komplexität, Basiswegabdeckung und Mutations-MSI werden von Gate 3 (quality-engineering/verification_linter.py) geprüft.
  • Kein semantisches Urteil: Beurteilt keine semantische Wahrhaftigkeit (Gate 2 ist Prompt-Review).
  • Keine RBAC-Durchsetzung: Ersetzt nicht die git-basierte RBAC-Prüfung.

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.

Verwandte Skills