.kanman/acceptance.json
Alle Schlüssel des Akzeptanz-Manifests: wie kanman Ihre App startet, auf sie wartet und die Akzeptanz-Spec einer Story ausführt.
Das Akzeptanz-Manifest sagt kanman, wie eine Story in Ihrem Repository belegt wird. Es liegt unter .kanman/acceptance.json im Wurzelverzeichnis des Repositorys. Damit kann kanman das Outcome-Gate ausführen: Es schreibt für jede Story eine ausführbare Akzeptanz-Spec, prüft, dass die Spec fehlschlägt, bevor es Code gibt, und prüft, dass sie nach der Änderung auf einem frischen Checkout besteht.
kanman bleibt unabhängig vom Repository. Das Manifest legt die Befehle fest, kanman führt sie in einer frischen Umgebung aus. Secrets bleiben in Ihren CI-Einstellungen und gehören nie ins Manifest.
Eine Schritt-für-Schritt-Einführung finden Sie unter Akzeptanz-Manifest anlegen. Den lokalen Prüfbefehl beschreibt .kanman/verify.json.
Beispiel
Das ist das Manifest des öffentlichen Demo-Repositorys kanman-ai/pilot-sandbox, eines kleinen TypeScript-Dienstes mit Playwright-Specs:
{
"version": 1,
"provision": {
"type": "docker_compose",
"file": "docker-compose.acceptance.yml",
"up": "docker compose -f docker-compose.acceptance.yml up -d --build --wait",
"down": "docker compose -f docker-compose.acceptance.yml down -v"
},
"ready_url": "http://localhost:3000/api/invoices",
"ready_timeout_seconds": 120,
"setup": "npm ci && npx playwright install --with-deps chromium",
"run": {
"command": "npx playwright test",
"spec_arg": ".kanman/acceptance/{KEY}/",
"env": {
"BASE_URL": "http://localhost:3000"
}
},
"spec_dir": ".kanman/acceptance/{KEY}",
"artifacts": [
"test-results/**/trace.zip",
"test-results/**/*.png",
"test-results/**/*.webm",
"test-results/results.json",
"playwright-report/**"
]
}
Für die Story SBX-12 führt kanman npx playwright test .kanman/acceptance/SBX-12/ gegen die mit Docker Compose gestartete App aus und speichert Trace, Screenshots, Video und JSON-Bericht als Nachweis.
Schlüssel auf oberster Ebene
| Schlüssel | Typ | Pflicht | Standard | Beschreibung |
|---|---|---|---|---|
version |
Zahl | ja | Immer 1. |
|
provision |
Objekt | ja | Wie eine frische Umgebung für die Spec gestartet wird. Siehe provision. | |
ready_url |
String (URL) | nein | kanman fragt diese URL nach dem Start alle zwei Sekunden ab und macht weiter, sobald sie mit einem Status 2xx oder 3xx antwortet. Lassen Sie den Schlüssel weg, wenn Ihr Startbefehl erst zurückkehrt, wenn die App bereit ist (zum Beispiel docker compose up --wait). |
|
ready_timeout_seconds |
Ganzzahl | nein | 300 |
Wie lange kanman wartet, bis die Umgebung bereit ist. Höchstens 900. |
setup |
String | nein | Shell-Befehl, der einmal im Checkout läuft, nachdem die Umgebung bereit ist und bevor die Spec startet, zum Beispiel um Abhängigkeiten und Browser zu installieren. | |
run |
Objekt | ja | Wie die Spec ausgeführt wird. Siehe run. | |
spec_dir |
String | nein | .kanman/acceptance/{KEY} |
Ordner der Spec einer Story. {KEY} wird durch den Story-Schlüssel ersetzt. |
artifacts |
Liste von Strings | nein | ["test-results/**"] |
Glob-Muster der Dateien, die als Nachweis aufbewahrt werden (Traces, Screenshots, Videos, Berichte, Apply-Logs). Sie sind im Nachweispaket verlinkt. Der erste Eintrag, der ein einfacher Pfad auf .json ohne Platzhalter ist (zum Beispiel test-results/results.json), wird als JSON-Bericht des Frameworks gelesen. |
framework |
String | nein | playwright |
Test-Framework der Specs: playwright, vitest, jest, pytest oder other. kanman schreibt Specs damit im passenden Stil und liest die Ergebnisse richtig. Bei other zählt nur der Exit-Code. |
Unbekannte Schlüssel werden ignoriert. Ein Manifest für eine neuere Version funktioniert also auch mit einem älteren Runner.
provision
provision.type wählt eine von zwei Formen.
Docker Compose
Für Anwendungen, die als ein oder mehrere Container starten.
| Schlüssel | Typ | Pflicht | Standard | Beschreibung |
|---|---|---|---|---|
type |
String | ja | docker_compose |
|
file |
String | ja | Pfad der Compose-Datei, relativ zum Repository. | |
up |
String | nein | docker compose -f <file> up -d --build --wait |
Vollständiger Befehl, der die Umgebung startet. Der Standard kehrt erst zurück, wenn die Health Checks bestehen. |
down |
String | nein | docker compose -f <file> down -v |
Vollständiger Befehl, der die Umgebung nach dem Run entfernt. |
service |
String | nein | Name des Hauptdienstes, zu Ihrer eigenen Orientierung. kanman akzeptiert den Schlüssel, nutzt ihn aber nicht. |
Apply
Für Repositorys, die keine laufende App sind, zum Beispiel Infrastruktur oder Konfiguration. Der Nachweis ist das Apply-Log plus das, was Ihre Spec prüft.
| Schlüssel | Typ | Pflicht | Standard | Beschreibung |
|---|---|---|---|---|
type |
String | ja | apply |
|
command |
String | ja | Befehl, der die Umgebung erzeugt, zum Beispiel Plan und Apply gegen einen Wegwerf-Workspace. | |
down |
String | nein | Befehl, der sie wieder abbaut. |
Beispiel für ein Infrastruktur-Repository, das seine Module gegen einen lokalen Test-Stack prüft:
{
"version": 1,
"provision": {
"type": "apply",
"command": "make test-env-up > apply.log 2>&1",
"down": "make test-env-down"
},
"ready_timeout_seconds": 600,
"setup": "make tools",
"run": {
"command": "pytest",
"spec_arg": ".kanman/acceptance/{KEY}/",
"env": {
"TEST_ENV": "acceptance"
}
},
"spec_dir": ".kanman/acceptance/{KEY}",
"framework": "pytest",
"artifacts": ["apply.log", "reports/**/*.xml"]
}
run
| Schlüssel | Typ | Pflicht | Standard | Beschreibung |
|---|---|---|---|---|
command |
String | ja | Befehl, der Specs ausführt, zum Beispiel npx playwright test. |
|
spec_arg |
String | nein | Argument, das an command angehängt wird, um nur die Spec einer Story auszuführen. {KEY} wird durch den Story-Schlüssel ersetzt. |
|
env |
Objekt aus Strings | nein | {} |
Zusätzliche Umgebungsvariablen für den Spec-Durchlauf. Nur einfache Werte, nie Secrets. |
Der vollständige Befehl für eine Story ist command, ein Leerzeichen und spec_arg mit eingesetztem {KEY}.
kanman setzt für den Durchlauf immer CI=true und KANMAN_STORY_KEY (den Story-Schlüssel). Werte aus run.env haben Vorrang.
Tipp
Behalten Sie den Schrägstrich am Ende von spec_arg, wenn Sie einen Ordner übergeben. Playwright behandelt das Argument als Muster, .kanman/acceptance/SBX-1 würde also auch SBX-12 treffen.
Der Platzhalter {KEY}
{KEY} ist der Story-Schlüssel, den kanman auf der Story-Seite zeigt: das Schlüsselpräfix des Teams und eine Nummer, zum Beispiel SBX-12. Er wird in spec_dir und run.spec_arg ersetzt.
Der geschützte Spec-Ordner
Alles unter .kanman/acceptance/ gehört dem Spec-Autor von kanman:
- kanman schreibt die Spec aus dem Demonstrate-Block der Story, bevor die Story nach Ready wandert. Die Dateien müssen im eigenen Ordner der Story liegen (
.kanman/acceptance/<KEY>/). - Sobald die Spec wie erwartet fehlschlägt, committet kanman sie auf den Branch
kanman/spec/<KEY>. Der Umsetzungs-Branch startet von dort, die Spec kommt also mit dem Pull Request. - Die Implementierung ändert diese Dateien nie. Jedes Preset sperrt
.kanman/acceptance/**für den Executor, und der Diff-Wächter stoppt den Run, falls ein Commit den Ordner trotzdem berührt oder der Ordner von der bei Ready freigegebenen Fassung abweicht. - Eine Spec darf ihr eigenes Ziel nicht mocken. Netzwerk-Interception, MSW, nock und Modul-Mocks des geprüften Verhaltens machen die Spec ungültig.
Wie kanman das Manifest nutzt
| Zeitpunkt | Was kanman ausführt |
|---|---|
| Vor Ready | provision, Warten auf ready_url, setup, dann die neue Spec auf Ihrem Standard-Branch. Sie muss laufen und fehlschlagen. |
| In Progress nach Review | Dasselbe in einer frisch bereitgestellten Umgebung gegen den Umsetzungs-Branch, mit wiederhergestellter freigegebener Spec. Die Spec muss bestehen. |
| Review nach Done | Dasselbe auf einem Clean-Room-Checkout (nie dem Arbeitsverzeichnis des Executors) in einer frischen Umgebung. Die Spec muss bestehen, und artifacts werden als Nachweis gespeichert. |
| Nach einem Deployment | Meldet Ihr GitHub-Repository ein erfolgreiches Deployment mit Umgebungs-URL, führt kanman die Specs der Stories, die in den sieben Tagen davor gemergt wurden, gegen diese URL aus, ohne etwas bereitzustellen. Ein Fehlschlag wird als Regression in die Anforderungen des Teams eingereicht. |
Jeder Durchlauf bekommt einen frischen Checkout in einem eigenen Verzeichnis. down läuft nach jedem dieser Schritte, auch wenn die Spec fehlschlägt. Ein Durchlauf (Bereitstellung, Setup und Spec zusammen) darf höchstens 30 Minuten dauern.
Eine Spec, die nicht kompiliert, keine Tests findet oder den Test-Runner abstürzen lässt, zählt als Fehler, nicht als rot. Probleme, bevor die Spec startet (Klonen, Bereitstellung, Bereitschaftsprüfung, Setup), zählen als Umgebungsfehler; kanman wiederholt sie still, bevor es Sie fragt.
Validierungsfehler
kanman liest das Manifest von Ihrem Standard-Branch, wenn eine Story Richtung Ready wandert. Fehlt es oder ist es ungültig, bleibt die Story in der Verfeinerung, und die Story-Seite zeigt Das Repository hat keine .kanman/acceptance.json, daher kann keine Akzeptanzspezifikation laufen oder Das Akzeptanz-Manifest ist ungültig: mit dem Grund. Häufige Ursachen:
| Problem | Lösung |
|---|---|
version must be 1 |
Ergänzen Sie "version": 1. |
provision.type must be docker_compose or apply |
Verwenden Sie eine der beiden Formen. |
ready_timeout_seconds is above 900 |
Senken Sie den Wert oder lassen Sie up erst zurückkehren, wenn die App bereit ist. |
run.command is empty |
Tragen Sie den Befehl ein, der Ihre Specs ausführt. |
Repositorys ohne Manifest laufen nur mit dem Preset Testphase; mit jedem anderen Preset bleibt die Story in der Verfeinerung. kanman nutzt dann CI, den Testplan und den Reviewer-Run, und das Nachweispaket sagt deutlich, dass kein Ergebnisnachweis vorliegt.
Verwandte Seiten
- Das Outcome-Gate und Nachweise
- Akzeptanz-Manifest anlegen
- .kanman/verify.json
- Richtlinien-Einstellungen (
require_acceptance_spec)
Zuletzt aktualisiert: January 1, 0001
kanman öffnen