# 0.7.0: ein Run, deine Entscheidungen, kein eigener Zustand

*24. Oktober 2026 · Release · geschrieben für 0.7.0*

0.7.0 ist die bisher größte Änderung an der Suite. Das Release ist nicht
abwärtskompatibel und ändert, wie du im Alltag mit der Suite arbeitest. Dieser
Beitrag erklärt, was sich geändert hat, warum, und was ein Projekt tun muss,
das mit 0.6 eingerichtet wurde. Wer nur die Schritte braucht, springt zu
[Umstieg von 0.6](#umstieg-von-06).

## Wie 0.6 funktioniert hat

Bis 0.6 war die Suite ein **Loop**. Jeder Aufruf von
`/continuous-refactoring` machte einen Durchgang: Er wählte den am längsten
überfälligen der vier Tracks (Safety Net, Guardrails, Housekeeping,
Investigation), jeder mit eigenem Rhythmus, und übergab ihn an den Skill
dieses Tracks. Der lief Scan → Priorisieren → Entwurf → Umsetzung → Lernen
ab, jeder Schritt ein eigener Skill. Insgesamt elf Skills, und nur
`refactor-learn` durfte die Aufzeichnungen der Suite schreiben.

Diese Aufzeichnungen lagen in Dateien unter `.scratch/refactor/`:

- `config.md`, pro Person und Rechner: wo die Buchführung liegt und ob
  Tickets und Merge Requests automatisch oder nach Rückfrage angelegt werden
  (`Ticket-create-mode`, `MR-create-mode`)
- `bookkeeping.md`, oder stattdessen ein Tracker-Ticket: Rhythmus, letzter
  Scan und offene Punkte jedes Tracks
- `merge-requests.md` und `out-of-scope/` für gemerkte Merge Requests und
  Ablehnungen

Als Sicherung von Anfang an hielt die Suite bei zwei offenen Merge Requests
und fünf offenen Kandidaten an: Ein Durchgang an dieser Grenze endete ohne
neue Arbeit.

## Was im Weg stand

Bis 0.6 standen zwei Dinge im Weg:

- **Die Autonomie war pro Rechner festgelegt.** Eine Config-Datei entschied
  einmal, ob die Suite Tickets und Merge Requests selbst anlegt oder vorher
  fragt. Beim einen Aufruf „zeig mal“ und beim nächsten „mach einfach“ zu
  sagen, ging nicht.
- **Sie führte eigene Aufzeichnungen.** Ein Buchführungsdokument, lokal oder
  in einem Tracker-Ticket, hielt fest, was gescannt und angelegt war. Es
  konnte von dem abweichen, was der Tracker tatsächlich zeigte, und welcher
  Track als Nächstes dran war, ergab sich aus einem Veraltungsquotienten, den
  niemand vorhersagen konnte.

## Ein Run, eine Kette von Entscheidungspunkten

`/continuous-refactoring` macht jetzt einen **Run**: von deinen offenen
Refactoring-Tickets bis zu einem geöffneten Merge Request. Unterwegs
durchläuft er eine feste Kette von **Entscheidungspunkten**: Abgleich,
Track-Wahl, Scan, Tickets anlegen, Ticket auswählen, Entwurf, Umsetzung,
Merge Request.

Jeder Entscheidungspunkt zeigt dieselben drei Dinge: was er **gefunden** hat,
die **Optionen** und **eine Empfehlung** mit kurzer Begründung. In deinen
Tracker, deine Forge oder deine Dateien wird nur geschrieben, was aus einem
Entscheidungspunkt folgt.

Ohne weitere Angabe ist der Run **interaktiv**: Du beantwortest jeden
Entscheidungspunkt. Im Aufruf kannst du mehr sagen, in deinen eigenen Worten:

```text
/continuous-refactoring
/continuous-refactoring do it yourself
/continuous-refactoring diy
/continuous-refactoring Safety Net, ohne zu fragen
/continuous-refactoring bearbeite Ticket #42
/continuous-refactoring nur die Rector-Tools
```

„do it yourself“, oder einfach „diy“, macht den Run **autonom**: Er nimmt an jedem
Entscheidungspunkt seine eigene Empfehlung. Die Befunde, die er dir gezeigt
hätte, schreibt er trotzdem, dazu die gewählte Empfehlung. So kannst du
hinterher nachlesen, warum der Run so gelaufen ist. Wenn du interaktiv
startest und es dir anders überlegst, sag „mach ab hier selbst weiter“, und
der Run läuft ab dem nächsten Entscheidungspunkt autonom.

## Kein eigener Zustand

Die Suite führt keine eigenen Aufzeichnungen mehr. Bei jedem Run sucht sie in
deinem Tracker und deiner Forge nach ihren Tickets, Merge Requests und
Ablehnungen. Deshalb fällt weg:

- die Config-Datei und das Buchführungsdokument, lokal und remote
- `Ticket-create-mode` und `MR-create-mode`
- die Rhythmen der Tracks

Tickets werden an ihrem Gegenstand erkannt, nicht an einem festen Label oder
Titel. Ein Ticket, das du selbst geschrieben hast, wird aufgegriffen, wenn es
deine **Candidate**-Markierung trägt (sofern dein Tracker eine hat) oder wenn
du es im Aufruf nennst. Ein Track wird einmal gescannt; danach sind seine
Tickets die Aufzeichnung.

All das findet die Suite über die **Refactoring operations** in
`docs/agents/issue-tracker.md`. Auch dieser Abschnitt ändert sich:

- **Search** ist neu und **Pflicht**: wie Tickets nach Wörtern gesucht
  werden, offene und geschlossene zusammen.
- **Rejected**, **Blocked by** und **Housekeeping** sind neu und optional.
  Ohne **Rejected** schlägt der Run einen Ort vor, wenn er zum ersten Mal eine
  Ablehnung festhält.
- **Bookkeeping**, **Filed date** und **Comment author and time** entfallen.

## Die Grenzen fallen weg

Die Grenzen von zwei offenen Merge Requests und fünf offenen Kandidaten waren
eine Sicherung von Anfang an, kein Fehler. Mit der Zeit hat sich gezeigt,
dass sie nicht nötig sind, solange zwei Dinge gelten:

- Die Merge Requests bauen nicht aufeinander auf (keine Stacked MRs), und
- der Agent erkennt, wann ein offener Merge Request mit der geplanten
  Änderung in Konflikt geraten wird, und berücksichtigt das bei der Planung.

Deshalb fallen beide Grenzen in 0.7.0 weg. Wer in seinem Projekt trotzdem eine
Grenze haben will, kann sie dort weiterhin setzen.

Ohne die Grenze von zwei Merge Requests wird noch etwas möglich: Ein Ticket
kann jetzt in mehreren kleineren Merge Requests umgesetzt werden statt in
einem großen. Jeder zweigt für sich vom Default-Branch ab, und jeder ist für
Menschen leichter zu reviewen.

## Zwei Skills statt elf

Die Suite besteht jetzt aus `continuous-refactoring` und
`continuous-housekeeping`. Die neun anderen sind weg.

Die Aufteilung hatte zwei Zwecke: Der ganze Loop sollte nicht in einer
einzigen Skill-Datei stehen, und man sollte in einzelne Schritte des Loops
springen können. Die Nutzung hat gezeigt, dass beides keine eigenen Skills
braucht:

- **Das Routing zwischen Skills war unzuverlässig**, je nach Agent.
  Referenzdateien, die nur bei Bedarf gelesen werden, funktionieren mit allen
  Agenten zuverlässiger.
- **In einen Schritt springen geht auch ohne eigenen Skill.** Im Aufruf den
  Schritt zu nennen, bei dem der Agent einsteigen soll, hat damals
  funktioniert und funktioniert auch heute.

Hat dein Projekt eigene Skills fürs Planen und Umsetzen, empfiehlt ein Run
jetzt diese und nutzt die Abläufe der Suite nur als Rückfall. Vorher wurden
die eigenen Skills eines Projekts bei Refactoring-Arbeit ignoriert.

## Housekeeping als stehendes Ticket

Housekeeping ist jetzt ein **stehendes Ticket**, erzeugt aus einer Vorlage in
deinem Repository, mit einem **Rhythmus**, den du wählst. Refactoring-Ideen,
die für ein eigenes Ticket zu klein sind, kommen als Kommentare daran. Es hat
einen eigenen Befehl, `/continuous-housekeeping`, den du planen kannst und den
ein Agent auch selbst starten darf, wenn das Ticket fällig ist. Siehe
[Housekeeping](https://continuous-refactoring.de/de/docs/housekeeping.md).

## Umstieg von 0.6

Ein Projekt, das mit 0.6.0 eingerichtet wurde, braucht drei Schritte.

1. **Onboarding erneut ausführen.** Ruf `/continuous-refactoring` auf. Es
   ergänzt **Search** in deinem Abschnitt `## Refactoring operations` und
   entfernt die Einträge, die es nicht mehr gibt. Danach endet der Run;
   committe die geänderte Tracker-Datei und ruf ihn erneut auf.
2. **Alte Dateien löschen** unter `.scratch/refactor/`: `config.md`,
   `bookkeeping.md`, `merge-requests.md` und den Ordner `out-of-scope/`. Sie
   werden nicht mehr gelesen. Tickets, die als Markdown-Dateien in
   `.scratch/refactor/issues/` liegen, bleiben. Wenn du deine alten
   Ablehnungen behalten willst, nenne ihren Ordner unter **Rejected**, statt
   ihn zu löschen. Eine Ablehnung, die wiederkommen soll, sobald dein Projekt
   eine PHP-Version erreicht, braucht eine Zeile `Blocker: PHP >= X.Y`. Lag
   deine Buchführung in einem Tracker-Ticket, schließ dieses Ticket.
3. **Symlinks entfernen**, die auf die entfernten Skills zeigen:
   `refactor-loop`, `refactor-scan`, `refactor-prioritize`,
   `refactor-design`, `refactor-implement`, `refactor-learn`,
   `continuous-safety-net`, `continuous-guardrails`,
   `continuous-investigation`.

Migriert wird nichts. Der erste Scan jedes Tracks baut die Arbeitsliste als
Tickets neu auf.

## Kleinere Änderungen

- Das Onboarding probiert seine Such- und Merge-Request-Befehle jetzt aus,
  **bevor** es dir die Zusammenfassung zeigt. Schlägt einer fehl, etwa mit
  einem älteren `glab` oder `gh`, fragt es gleich nach einer funktionierenden
  Variante. Du bestätigst also nur einmal.
- Das Onboarding beendet jetzt den Run, statt im selben Aufruf weiterzumachen.
- Die Suite setzt und liest die Triage-Labels `needs-info` und
  `ready-for-agent` nicht mehr. Ob ein Ticket auf eine Antwort wartet, liest
  sie aus seinen Kommentaren. Sie bleibt mit anderen Engineering-Skills wie
  [mattpocock/skills](https://github.com/mattpocock/skills) kompatibel und
  braucht keinen davon.
- Datumszeile, Vorlagenzeile und Titel des Housekeeping-Tickets dürfen frei
  formuliert sein. Runs lesen sie an ihrem Inhalt.

Die [Run-Seite](https://continuous-refactoring.de/de/docs/run.md) beschreibt den Run, wie er heute ist.
Fragen zum Umbau gern in den
[GitHub Discussions](https://github.com/Art4/continuous-refactoring/discussions).

## Changelog 0.7.0

Die Einträge aus dem Upstream-Changelog zu 0.7.0, unverändert auf Englisch. Auch auf GitHub: [Release 0.7.0](https://github.com/Art4/continuous-refactoring/releases/tag/0.7.0).

- **Breaking, for 0.7.0:** the suite is rebuilt around one **run** of decision points, with all state in your tracker and forge. `/continuous-refactoring` now leads from your open refactoring tickets to one opened merge request and, at every step — reconcile, Track choice, scan, filing tickets, selecting, design, implementation, merge request — shows what it found, the options and one recommendation. By default you decide each time; say in the call that it should do the run itself ("do it yourself"), or mid-run "carry on yourself from here", and it takes its own recommendations. The call also takes a Track, a ticket or a restriction ("only the Rector tools") in your own words. The suite keeps no state of its own any more: the config file, the bookkeeping document (local and remote), `Ticket-create-mode`, `MR-create-mode` and the Track cadences are gone, and so are the limits of two open merge requests and five open candidates. Tickets are found by their subject instead of a fixed label or title, a ticket you wrote yourself is picked up through a **Candidate** mark or by naming it, and a Track is scanned once — afterwards its tickets are the record. Where your project has its own skills for planning and implementing, a run recommends those and uses the suite's procedures as a fallback. Housekeeping is now one standing ticket made from a template in your repository, with a rhythm you choose, refactoring ideas left on it as comments, and its own command `/continuous-housekeeping` that can be scheduled and that an agent may start by itself. The suite is two skills, `continuous-refactoring` and `continuous-housekeeping`; the nine others are removed. The operations in `docs/agents/issue-tracker.md` change their cut: **Search** is new and required; **Rejected**, **Blocked by** and **Housekeeping** are new and optional; **Bookkeeping**, **Filed date** and **Comment author and time** are removed.

  **A project onboarded on 0.6.0 needs three steps.** (1) Run the onboarding again: call `/continuous-refactoring`, which adds **Search** to your `## Refactoring operations` section and removes the bullets that no longer exist. (2) Delete the suite's old files under `.scratch/refactor/` — `config.md`, `bookkeeping.md`, `merge-requests.md` and the folder `out-of-scope/`; they are no longer read. Tickets kept as local Markdown files under `.scratch/refactor/issues/` stay. To keep your old rejections where they are instead of deleting them, name that folder under **Rejected** in the section (a rejection that should come back by itself once a PHP version is reached needs a line `Blocker: PHP >= X.Y`). Where the bookkeeping lived in a tracker issue, close that issue. (3) Remove the symlinks of the removed skills from your skills folder: `refactor-loop`, `refactor-scan`, `refactor-prioritize`, `refactor-design`, `refactor-implement`, `refactor-learn`, `continuous-safety-net`, `continuous-guardrails`, `continuous-investigation`. Nothing is migrated; the first scan of each Track rebuilds the worklist as tickets.
- The Housekeeping ticket's date line, template line and title are described by what they hold, not by a fixed wording: the onboarding words the Housekeeping bullet itself, and later runs read the due date and the template from the ticket in whatever words it states them.
- The suite no longer sets or reads the triage labels `needs-info` and `ready-for-agent`. Whether a ticket waits for an answer or is ready to work is read from its comments, so it works in a tracker without them. It stays compatible with other engineering skills, such as those of mattpocock/skills, and needs none of them.
- The onboarding now ends the run. Instead of offering to go on in the same call, `/continuous-refactoring` reports the onboarding as complete, points out the changes it left in the working tree (the tracker file) and recommends committing them and calling the skill again.
- The onboarding now tries its search and merge-request commands before it shows you the summary, not after writing the tracker file. When one fails, for example because your installed `glab` or `gh` is older, the onboarding asks about a working variant at that point, so the summary you confirm already contains commands that work and no second confirmation follows after writing. A run on its own takes a working variant it found itself; without one, it writes nothing and names the open question.

---

Fragen oder Anmerkungen zu diesem Beitrag? Gern in den [GitHub Discussions (Q&A)](https://github.com/Art4/continuous-refactoring/discussions/categories/q-a).
