Skip to content
    HAQQ
    • Preise
    Kostenlos starten
    Kostenlos startenDemo buchen
    Einloggen
    1. Startseite
    2. Blog
    3. Kann KI Prozessführung planen? Wir haben einen GOAP-Planner gebaut
    Zurück zum BlogKI & Rechtstechnologie

    Kann KI Prozessführung planen? Wir haben einen GOAP-Planner gebaut

    Wir bauten einen funktionierenden A*-Prozessplaner in 517 Zeilen - und weigerten uns dann, ihn zu nutzen. Die vier Gates, die jeder KI-Planner vor einem echten Mandat bestehen muss.

    May 5, 2026
    9 Min. Lesezeit
    |
    Stephane BoghossianStephane Boghossian
    Kann KI Prozessführung planen? Wir haben einen GOAP-Planner gebaut

    Wir haben an einem Nachmittag einen GOAP-Planner gebaut. Er liefert für Engineering-Ziele in null Millisekunden einen sauberen Neun-Schritte-Plan. An eine Klageabweisung lassen wir ihn nicht heran. Hier ist, warum — und die vier Schleusen, die wir vorher schließen würden.

    Das Versprechen und das Urteil

    Goal-Oriented Action Planning (GOAP) ist die Architektur, die Schachengines nutzen: einen Baum möglicher Zukünfte halten, den günstigsten Pfad von hier zum Ziel suchen, den Rest verwerfen. Das passt für Litigation deutlich besser als ein Chat-Modell. Anträge, Discovery, Prozesse — alles Sequenzen von Zügen unter Nebenbedingungen. Chat-Modelle produzieren den nächsten plausiblen Satz. Planner legen sich auf ein Ziel fest und arbeiten rückwärts.

    Die wichtigsten Fakten

    • Ein funktionsfähiger A*-GOAP-Planner besteht aus 517 Zeilen reinem JavaScript ohne Abhängigkeiten — an einem Nachmittag aus ruflos claude-flow goal_ui portiert.
    • ruflos claude-flow-GOAP-Planner implementiert kein adaptives Replanning: plan() führt A* genau einmal bei der Zielübermittlung aus — verifiziert an den Aufrufstellen in Index.tsx und ResearchReportModal.tsx (EXTERNAL-CITE: ruflo claude-flow Quelltext, direkt gelesen).
    • Wer vor der Geltendmachung der Schiedsklausel einen materiellen 12(b)(6)-Antrag stellt, kann nach Morgan v. Sundance (2022) das Recht auf ein Schiedsverfahren verwirken — ein Shortest-Path-Planner läuft direkt hinein.

    Also haben wir einen gebaut. 517 Zeilen reines JavaScript, keine Abhängigkeiten, an einem Nachmittag aus dem GOAP-A*-Planner portiert, der in ruflos `goal_ui`-React-App steckt. Er läuft bei Engineering-Zielen wie „ship the auth refactor with tests and a PR“ in null Millisekunden und liefert einen sauberen Neun-Schritte-Plan.

    An einen echten Antrag lassen wir ihn nicht heran. Noch nicht. Dieser Beitrag erklärt, warum, und was sich ändern müsste, bevor wir es täten. Wer hierhergekommen ist für eine atemlose Empfehlung des nächsten KI-Dings für Anwälte, findet hier das Gegenteil: die Messlatte an Sorgfalt, die wir setzen, bevor wir ein Litigation-Ziel durch irgendeinen Planner laufen lassen — unseren, den von ruflo, irgendeinen —, und die Lücke zwischen dem heutigen Planner und dieser Messlatte.

    Was GOAP tatsächlich ist

    GOAP nimmt drei Eingaben: einen Zielzustand (Fakten, die wahr sein sollen — „PR ist offen“, „CI ist grün“, „deployed“), einen Ausgangszustand (was gerade zutrifft) und eine Aktionsbibliothek (jeder mögliche Zug, jeweils mit Vorbedingungen und Effekten — „`open_pr` erfordert `pushed=true` und `diff_reviewed=true`; setzt `pr_open=true`“). Dann läuft eine A*-Suche — derselbe Algorithmus, mit dem GPS um Stau herumroutet — über den Raum der Aktionssequenzen und liefert den günstigsten gültigen Pfad vom Ausgangs- zum Zielzustand. Schlägt ein Schritt während der Ausführung fehl, soll vom neuen Zustand aus neu geplant werden.

    Für Anwälte ist die naheliegendste Analogie das Schach. Ein Großmeister denkt nicht einen Zug nach dem anderen; er hält einen Baum möglicher Zukünfte im Kopf und beschneidet ihn, während sich die Partie entwickelt. GOAP ist genau das, nur mechanisiert. Es ist nicht generativ, es ist Suche.

    Die Architektur passt fast zu gut auf Litigation. Ein Antrag auf Verweisung ins Schiedsverfahren hat harte Vorbedingungen (eine Schiedsklausel existiert, eine Klage wurde zugestellt, noch kein Sachantrag wurde gestellt) und harte Effekte (Verwirkungsrisiken ausgeschlossen, das Gericht muss über die Schiedsfähigkeit entscheiden). Discovery hat eine strikte Reihenfolge (schriftliche Anfragen vor Depositions, Class-Zertifizierung vor der Sache, Meet-and-confer vor Anträgen auf Erzwingung). Summary Judgment hat ein Pass/Fail-Orakel. Die Form der Arbeit ist GOAP-förmig.

    Was wir gebaut haben

    Vier Dateien: `planner.js` (165 LOC, A* + binärer Min-Heap), `actions.js` (134 LOC, zwölf Engineering-Aktionen), `parse.js` (58 LOC, Phrasentabelle, die Englisch in einen Zielzustand übersetzt), `cli.js` (160 LOC, Runner). Insgesamt 517 LOC. Keine npm-Abhängigkeiten. In zwanzig Minuten lesbar.

    Wir haben ihn gegen das Ziel „ship the auth refactor with tests and a PR“ laufen lassen:

    text
    goal predicates: {"pr_open":true,"ci_green":true,"deployed":true}
    1. understand_code  (cost 2)  -> /zoom-out
    2. write_tests      (cost 3)  -> /tdd
    3. run_tests        (cost 1)  -> bash:test
    4. review_diff      (cost 1)  -> /review
    5. commit           (cost 1)  -> git:commit
    6. push_branch      (cost 1)  -> git:push
    7. open_pr          (cost 1)  -> /ship
    8. wait_ci          (cost 5)  -> bash:ci-wait
    9. merge_and_deploy (cost 2)  -> /land-and-deploy
    
    total cost: 17
    expansions: 13   time: 0 ms   found: true

    Neun Schritte, Kosten 17, dreizehn Node-Expansionen, null Millisekunden. Jeder Schritt bildet auf einen gstack-Skill oder einen Shell-Befehl ab, der Plan ist also ausführbar — nicht dekorativ. Wir haben außerdem ein kleineres Ziel getestet („test the login module“ — 3 Schritte, Kosten 6) und ein unerfüllbares (ein Prädikat, das keine Aktion setzt — es lieferte `found: false` mit dem nächstliegenden Teilplan, statt abzustürzen oder sich zu verhaken). Alle drei Verhaltensweisen entsprechen der Spezifikation.

    Das hat einen Nachmittag gedauert. Das ist nicht der schwierige Teil.

    Warum wir das von ruflo portiert haben

    Ruflo (das `claude-flow`-Ökosystem) liefert einen GOAP-Planner in seiner `goal_ui`-React-App mit — `goapPlanner.ts`, eine einzelne Datei, 180 Zeilen. Die Architektur ist solide. Wir haben ihn extrahiert.

    Während wir dabei waren, haben wir den Quelltext genau gelesen. Eine Behauptung, die den Kontakt damit nicht übersteht: Der Planner implementiert kein adaptives Replanning. Die Methode `plan()` führt A* genau einmal bei der Zielübermittlung aus und liefert ein `Step[]`, das eine UI-Animation antreibt. In der Datei gibt es keine Replan-Schleife, keine Plan-Invalidierung, keine Fehlerbehandlung. Wir haben die Aufrufstellen in `Index.tsx` und `ResearchReportModal.tsx` geprüft. Gleiches Bild.

    Wir erwähnen das nicht, um auf ruflo herumzuhacken — der Kern des Planners ist guter Code —, sondern weil es für den Rest dieses Artikels wichtig ist. Adaptives Replanning ist das eine Feature, das man sich am meisten wünschen würde, bevor man einen Planner an ein echtes Mandat heranlässt, und die prominenteste Open-Source-Implementierung mit Rechtsbezug hat es nicht. Wir bislang auch nicht. Niemand, den wir uns angesehen haben, hat es.

    Die drei Litigation-Ziele, die wir nicht durchlaufen haben

    Der ursprüngliche Plan war, drei echte Litigation-Ziele durch den Planner laufen zu lassen und die Ausgabe von einem erfahrenen Prozessanwalt bewerten zu lassen. Das haben wir nicht getan. Zwei Gründe. Erstens hat das Leiten von Litigation-Strategie durch eine öffentliche Drittanbieter-URL — selbst synthetische Strategie zu einem hypothetischen Sachverhalt — Privilegien-Implikationen, die wir für einen Blogbeitrag nicht eingehen wollten. Was wir für einen Mandanten nicht tun würden, sollten wir auch nicht für uns selbst tun. Zweitens hat unsere Aktionsbibliothek zwölf Einträge, und alle sind Engineering-Aktionen: `understand_code`, `write_tests`, `commit`, `push_branch`, `open_pr`, `wait_ci`, `merge_and_deploy`. Ihn auf eine Klageabweisung anzusetzen, hätte einen Plan erzeugt, der einem Prozessanwalt selbstbewusst geraten hätte, seine Antwort zu `git commit`ten.

    Die drei Testfälle, die wir formuliert haben, sind trotzdem nützlich — nicht als Benchmarks, die der Planner bestanden hat, sondern als Zwang, festzulegen, was die nächste Version können muss.

    Fall 1 – Klageabweisung mit Schiedsklausel-Verteidigung. Prompt: „gewinne einen Rule-12(b)(6)-Antrag in einem Vertragsstreit, bei dem der Kläger eine Pflichtverletzung behauptet, der Vertrag aber eine eindeutige Schiedsklausel enthält.“ Der Haken: 12(b)(6) ist das falsche Vehikel. Ein Schiedsverfahren wird über FAA §§ 3–4 mit einem Antrag auf Verweisung erzwungen. Wer vor der Geltendmachung der Schiedsklausel einen materiellen 12(b)(6)-Antrag stellt, kann nach Morgan v. Sundance (2022) das Recht auf ein Schiedsverfahren verwirken. Ein Planner, der den 12(b)(6)-Antrag entwirft, bringt den Mandanten in Kunstfehler-Gefilde.

    Fall 2 – Discovery-Strategie für eine Wage-and-Hour-Sammelklage mit 10 Beschäftigten (Kalifornien). Prompt: „entwirf einen Discovery-Plan mit Priorität auf kostengünstigen, hoch wirksamen Anfragen.“ Ein junger Associate würde sofort 30(b)(6)-Depositions vorschlagen. Der richtige Plan setzt schriftliche Anfragen vor Depositions, trennt die Class-Zertifizierung von der Sache, führt vor jeder Kontaktaufnahme mit einem mutmaßlichen Class-Mitglied den Belaire-West-Opt-out-Hinweis durch und lädt den externen Payroll-Dienstleister per Subpoena (sauberere Daten, schneller, keine Produktionskosten auf Beklagtenseite). Die Reihenfolge zählt hier mehr als der Inhalt.

    Fall 3 – Summary Judgment zu einem Wettbewerbsverbot in Kalifornien. Zwei Fallen. Falle eins: Der Prompt zitiert „Labor Code § 16600“ — ein Zitat, das es nicht gibt. Die korrekte Fundstelle ist Business & Professions Code § 16600. Falle zwei: Selbst mit korrigiertem Zitat verliert der Arbeitgeber so gut wie sicher. SB 699 und AB 1076 (in Kraft seit 1. Januar 2024) haben § 16600 erweitert und einen privaten Klagegrund mit Anwaltskostenerstattung hinzugefügt. Der richtige Schritt ist, dem Mandanten zu raten, die Durchsetzung des Wettbewerbsverbots vollständig fallenzulassen und, sofern der Sachverhalt es hergibt, auf eine Geschäftsgeheimnis-Theorie nach CUTSA umzuschwenken. Ein Planner, der den kürzesten A*-Pfad zu „das Wettbewerbsverbot gewinnen“ findet, findet einen Pfad zu einem sanktionsfähigen Schriftsatz.

    Diese drei Fälle teilen ein strukturelles Merkmal: Die wertvollste Ausgabe ist nicht ein Plan zum angegebenen Ziel des Nutzers. Es ist „dein Ziel ist falsch; hier ist das richtige Ziel“.

    Das ist nicht, was A tut. A findet den kürzesten Pfad. Es findet auch die kürzesten Pfade zu verlierenden Strategien.

    HAQQ AI kostenlos testen

    Erleben Sie KI-gestützte juristische Recherche und Entwurf

    Vier Schleusen, bevor wir das bei Litigation einsetzen

    Das müsste sich ändern. Nichts davon ist theoretisch — das sind die vier obersten Punkte auf dem v0.2-Plan.

    1. Die Aktionsbibliothek muss von Grund auf neu entworfen werden. Engineering-Aktionen haben eine Kostendimension (Entwicklerzeit) und saubere Vorbedingungen. Rechtliche Aktionen haben jurisdiktionelle Vorbedingungen (FAA gilt, Gericht liegt in Kalifornien, Schiedsklausel übersteht § 16600), gesetzliche Vorbedingungen, terminliche Vorbedingungen (Frist zur Klageerwiderung liegt 21 Tage entfernt) und adversariale Vorbedingungen (Gegenanwalt hat X noch nicht beantragt). Auch die Kostendimension ist eine andere: Geldkosten, Partnerstunden, Sanktionsrisiko, Risiko der Kostenverlagerung. Eine ernstzunehmende juristische Aktionsbibliothek umfasst wohl 200–500 Aktionen mit parametrisierten Prädikaten — eine echte Ontologie, geschrieben von Prozessanwälten, abgegrenzt nach Praxisgebiet.

    2. Der Ziel-Parser muss echtes juristisches Englisch verarbeiten. `parse.js` ist eine Phrasentabelle mit fünf Einträgen. Sie bildet „ship the auth refactor“ per Substring-Abgleich auf `{pr_open, ci_green, deployed}` ab. Sie kann „gewinne einen Rule-12(b)(6)-Antrag in einem Vertragsstreit, bei dem der Vertrag eine eindeutige Schiedsklausel enthält“ nicht parsen. Die Lösung ist klein — Haiku im JSON-Modus, schemabegrenzt auf bekannte Prädikate. Etwa ein halber Tag. Die kleinste der vier Schleusen, und ohne die anderen drei sinnlos.

    3. Der Planner muss selbst gehostet werden. Nichts von einem echten Mandantenfall kommt in die Nähe von `goal.ruv.io` oder irgendeiner Drittanbieter-URL. Abgesehen von den Privilegien-Bedenken kann man einen Planner nicht auditieren, den man nicht selbst betreibt. Selbst gehostet, auf Infrastruktur unter Kontrolle der Anwaltskanzlei, mit Logs, die der Kanzlei gehören. Für HAQQ nicht verhandelbar.

    4. Der Planner muss wissen, wann er das Ziel ablehnen soll. Die schwierigste Schleuse. Ein reiner A-Planner, der immer den kürzesten Pfad findet, führt verlierende Strategien wunderbar sauber aus. Die Lösung ist nicht nur adaptives Replanning (A erneut ausführen, wenn eine Aktion fehlschlägt). Die Lösung ist Goal Critique: ein Legal-AI-Schritt, der vor der Planung läuft, das Ziel gegen die Dogmatik prüft (§ 16600 + SB 699 + AB 1076 — „diese Durchsetzungsklage verliert“) und ein alternatives Ziel vorschlägt („Umschwenken auf CUTSA“). Replanning behebt Ausführungsfehler. Goal Critique behebt den tieferliegenden Fehlermodus — sich vollständig auf ein falsches Ziel festzulegen. Beides ist nötig; heute ist keines von beiden implementiert.

    Was das über KI in der Rechtsarbeit lehrt

    Die meisten KI-Produkte optimieren auf „gib mir eine selbstbewusste Antwort“. Das ist die falsche Form für Litigation, wo die Aufgabe darin besteht, die Frage zu hinterfragen, zu erkennen, was der Mandant zu wollen glaubt versus was er tatsächlich braucht, und den Zug zu finden, den der junge Associate übersehen hätte.

    GOAP kommt dieser Form näher als Chat. Es ist strukturell ehrlich: Es sagt einem, wenn es das Ziel nicht erreichen kann. Es legt die Sequenz offen, nicht nur die Schlussfolgerung. Es lässt sich prüfen, auditieren, erneut abspielen.

    Aber „näher als Chat“ heißt nicht „gut genug für die Rechtsarbeit“. Die Messlatte ist nicht „erzeugt einen Plan“. Die Messlatte ist „erzeugt einen Plan, für den ein Partner seinen Namen hergibt“. Das heutige GOAP, unseres eingeschlossen, erreicht die erste Messlatte. Die nächste Version muss die zweite erreichen. Wir sind der Meinung, dass niemandem, der heute einen Planner verkauft — unseren eingeschlossen —, bei einem laufenden Mandat vertraut werden sollte, solange die vier oben genannten Schleusen nicht geschlossen und nachgewiesen sind.

    Wie es weitergeht

    • Goal-Critique-Schritt (v0.2). Haiku im JSON-Modus mit dem Durchgang „dieses Ziel gegen die Dogmatik prüfen; bei Aussichtslosigkeit eine Alternative vorschlagen“, bevor der Planner läuft.
    • Legal-AI-Ziel-Parser (v0.2). Ersetzt die Phrasentabelle.
    • Adaptives Replanning (v0.2). `plan()` in eine Ausführungsschleife einbetten, die bei einem Fehlschlag neu sucht. Rund 50 Zeilen.
    • Juristische Aktionsbibliothek (v0.3). Abgegrenzt nach Praxisgebiet, geschrieben mit Prozessanwalt-Review, parametrisierte Prädikate. Monate an Arbeit — und das eigentliche Produkt.

    Sobald diese vier real und getestet sind, lassen wir die drei oben genannten Litigation-Fälle laufen und veröffentlichen die Ergebnisse — einschließlich der Fehlschläge, einschließlich der Kritik der Prozessanwälte. Bis dahin ist die einzige ehrliche Ausgabe diese hier: ein Engineering-Planner, der funktioniert, ein juristischer Planner, den es noch nicht gibt, und die Design-Notizen dafür, wie der zweite aussehen muss.

    Weiterführende Lektüre

    • das $1,67-Routing-Experiment für Klageabweisungen
    • governance by construction: die falsche Antwort heraus konstruieren
    • der Stand der agentischen Legal AI
    • Single-Prompt vs. Multi-Agent Due Diligence
    S

    Stephane Boghossian

    Head of Growth

    Verwandte Ressourcen

    JustinianLegal AI ChatSOTA Agentic Legal AISecurity

    Verwandte Artikel

    7 LLMs im Benchmark: Prozessstrategie nach New Yorker Recht

    7 LLMs im Benchmark: Prozessstrategie nach New Yorker Recht

    KI-Prompts für Anwälte: Bibliothek mit 168 Prompts + 2026-Leitfaden

    KI-Prompts für Anwälte: Bibliothek mit 168 Prompts + 2026-Leitfaden

    Strafanzeige nach Arbeitsprozess in Dubai: Was jetzt zu tun ist

    Strafanzeige nach Arbeitsprozess in Dubai: Was jetzt zu tun ist

    Häufig gestellte Fragen

    What is GOAP (goal-oriented action planning)?

    GOAP takes three inputs — a goal state (facts you want true), an initial state, and an action library where each action has preconditions and effects — then runs A* search over action sequences and returns the cheapest valid path from initial to goal. It is not generative; it is search, the same algorithm family GPS uses to route around traffic.

    Can AI plan litigation strategy?

    Structurally it's a better fit than chat — motions, discovery, and trials are sequences of moves under constraints, and litigation has GOAP-shaped preconditions and orderings. But not yet in practice: A* finds shortest paths to losing strategies, and in the article's three test cases the most valuable output would have been 'your goal is wrong; here is the right goal' — which is not what A* does.

    Why isn't an AI planner safe for real legal matters yet?

    Four gates remain open: a real legal action library (200-500 actions with jurisdictional, statutory, calendar, and adversarial preconditions), a goal parser that handles real legal English, self-hosting so nothing touches third-party URLs (privilege), and goal critique — a step that checks the goal against doctrine and refuses doomed objectives before planning starts.

    What legal traps would a naive AI planner fall into?

    The article's three test cases: filing a substantive 12(b)(6) before moving to compel arbitration can waive the right to arbitrate under Morgan v. Sundance (2022); citing the nonexistent 'Labor Code § 16600' instead of Business & Professions Code § 16600; and pursuing California non-compete enforcement that SB 699 and AB 1076 made a losing, sanctionable path when the right move is pivoting to a CUTSA trade-secret theory.

    Was kommt als Nächstes?

    HAQQ AI kostenlos testen

    Erleben Sie KI-gestützte juristische Recherche und Entwurf

    ROI berechnen

    Sehen Sie, wie viel Zeit und Geld HAQQ Ihrer Kanzlei spart

    380+ juristische Prompts durchsuchen

    Sofort einsatzbereite Prompts für jede juristische Aufgabe

    Zurück zum Blog

    Vorheriger Artikel

    Was ein KI-Schriftsatz kostet: $1.67 mit Routing, $4.55 ohne

    Nächster Artikel

    HAQQ Legal Agent Study: Ein Long-Horizon-Benchmark für Rechts-KI

    Setzen Sie das ein

    Stellen Sie HAQQ die Frage, die dieser Artikel bei Ihnen aufgeworfen hat.

    HAQQ across all devices
    HAQQ Legal AI Platform Logo

    Ihr juristischer KI-Zwilling und Kanzleimanagement-System für Entwurf, Abrechnung und Gewinnen.

    Download on theApp StoreGet it onGoogle Play

    Dokumentationen

    • Docs wird in einem neuen Tab geöffnet
    • Erste Schritte wird in einem neuen Tab geöffnet
    • Presse wird in einem neuen Tab geöffnet
    • Produkt-Updates wird in einem neuen Tab geöffnet
    • Status wird in einem neuen Tab geöffnet
    • Sicherheit
    • FAQ wird in einem neuen Tab geöffnet
    • Community wird in einem neuen Tab geöffnet
    • Support wird in einem neuen Tab geöffnet

    Academy

    • Kurs wird in einem neuen Tab geöffnet
    • Skills wird in einem neuen Tab geöffnet
    • Klauseln wird in einem neuen Tab geöffnet
    • Prompt-Bibliothek wird in einem neuen Tab geöffnet
    • Tools wird in einem neuen Tab geöffnet
    • Research Hub wird in einem neuen Tab geöffnet
    • Dokumente wird in einem neuen Tab geöffnet

    Website

    • eFirm
    • Juristischer KI-Chat
    • Mobile App
    • Justinian KI-Engine
    • HAQQ eBar
    • HAQQ eWallet
    • Preise
    • Vergleichen Sie uns
    • Lösungen
    • Blog
    • Team kennenlernen
    • Mach mit wird in einem neuen Tab geöffnet
    App öffnen
    • Sprachenar en fr es it de pt
    • Kontaktinfo@haqq.ai
    • Statusbetriebsbereit·fundiert
    • Nutzungsbedingungen
    • Datenschutzrichtlinie
    • Cookie-Richtlinie
    • Datenverarbeitung wird in einem neuen Tab geöffnet
    • humans.txt wird in einem neuen Tab geöffnetlawyers.txt wird in einem neuen Tab geöffnetsecurity.txt wird in einem neuen Tab geöffnet
    © 2026 HAQQ Inc. Alle Rechte vorbehalten.Produkt intern von HAQQ entwickelt. Website mit modernen Web-Tools gebaut.

    GOAP Plan Tree

    Goal-Oriented Action Planning expands actions until preconditions are met

    Win MTD
    Establish lack of jurisdiction
    Show statute of limitations
    Find pleading defects
    Pull venue case law
    Compute filing dates
    Cite-check FRCP 12(b)
    Compare to local rules

    Why GOAP Breaks in Litigation

    Unknowable preconditions

    Did opposing counsel waive? You cannot know without asking them.

    Adversarial state changes

    Judge rules mid-plan. The world model is now stale.

    Non-stationary costs

    A motion that was "cheap" yesterday triggers sanctions today.

    Soft goals

    "Win" is not a single goal — it is a moving Pareto front.

    Four Gates Before GOAP Ships

    Each must be true. Today, none are.

    Closed-world facts

    closed

    Stable cost function

    closed

    Verifiable preconditions

    closed

    Single-objective goal

    closed