In einer ausgelieferten Instanz war ENVIRONMENT.md nach einem Upgrade-Lauf sachlich falsch, ohne dass irgendein Werkzeug es gemeldet hat. Gemessen (Abgleich der Datei mit dem Checkout, 2026-10-19):
Aussage in der Datei
Tatsaechlicher Stand
Stack "per upgrade-instance.md auf 8.0.0 gehoben"
wikitool version: 10.0.0, exportiert 2026-10-13; Upgrade-Commits vom selben Tag liegen im Git-Log
".wikitool-remotes.json existiert noch nicht, das Publish-Remote-Gate ist daher nicht scharf"
Die Datei ist seit 10.0.0 kein Konzept mehr (instructions/migrations/10.0.0-settings-tiers.md:1-20); das Gate haengt an remotes.allowed_push_urls in .wikitool-local.json. Die Schlussfolgerung (nicht scharf) stimmt zufaellig noch, die Begruendung nicht
"Telemetrie ist eingeschaltet (.wikitool-telemetry.json)"
Die Datei existiert nicht mehr; die Einstellung steht in .wikitool-local.json (telemetry.enabled)
Abschnitt "Connectoren" fehlte ganz
Ein Aufgaben-Backend (CalDAV) ist seit dem Upgrade konfiguriert (wikitool.json, doctor: tasks-provider) - genau die Art Konstante, die der Abschnitt aufnehmen soll
doctor meldete in dieser Zeit durchgehend environment: OK ... present and filled.
Es ist nicht der erste Fall dieser Art: #34 (Datei beschrieb ein Gate als gesetzt, das im Checkout inert war) hatte dieselbe Wurzel.
Ursache
Die Datei wird genau einmal angelegt und danach von nichts mehr beruehrt:
instructions/bootstrap.md:64-73 und instructions/setup-instance.md:271-276 legen sie an bzw. bieten es an. Beide sind Einmal-Schritte.
instructions/upgrade-instance.md hat keinen Schritt, der sie anfasst. Sie kommt dort nur in der Klassifizierungstabelle vor (Zeile 130) mit der Aussage, dass sie nie klassifiziert wird. Das ist richtig fuer die Dateiebene, laesst aber die inhaltliche Ebene unbeachtet: ein Upgrade aendert Dinge, die in der Datei stehen koennen.
tools/chemenu/commands/doctor.py:402-428 (check_environment) prueft nur "fehlt" und "Template-Sentinel noch drin". Das ist so gewollt (Docstring: optional, kein FAIL), aber es heisst auch: ein gefuellter, falscher Inhalt ist fuer doctor nicht von einem richtigen zu unterscheiden.
ENVIRONMENT.md.template:23-25 sagt "when something here stops being true, correct it" - wer das tun soll und wann, sagt nichts.
Die Vorlage und die Setup-Anweisung ermuntern implizit, ableitbare Werte (Version, Dateinamen der Einstellungen) als Freitext festzuhalten. Diese haben eine eigene Quelle (.wikitool-release.json, config) und veralten damit zwangslaeufig: Verstoss gegen "eine Regel, ein Ort" im Kleinen.
Nicht gemessen, sondern angenommen: dass jede Instanz mit einer vor dem Upgrade gefuellten Datei denselben Drift hat.
In der Breite: wo kann eine ENVIRONMENT.md noch veralten?
Zu pruefen und je Zeile zu entscheiden (Hinweis im Schritt, Check, Vorlage aendern, nichts tun):
instructions sync mit neuen oder entfernten Skills
Abschnitt "Skills"
nein
config set / config migrate (neues Backend, Tracker, Backup, Intake)
Abschnitt "Connectoren", Hinweise zu Gate und Telemetrie
nein
MCP-Server kommt hinzu oder faellt weg (Harness-Konfiguration liegt ausserhalb des Repos)
Tabelle "MCP-Server"
nein, und von aussen nicht pruefbar
git remote add/set-url, Umzug des Publish-Ziels
Abschnitt "Git-Remotes"
doctor zeigt den Remote, vergleicht ihn aber nicht
Wechsel oder Dazukommen eines Harness
Abschnitt "Harness"
nein
CI wird eingefuehrt oder abgeschaltet
Abschnitt "CI"
nein
Zweiter Checkout derselben Instanz
Datei ist pro Checkout, also je Maschine eigener Drift; backup spiegelt sie nur (tools/chemenu/backup.py:57)
nur gespiegelt, nicht geprueft
Loesungsvorschlag
Gestaffelt, billigstes zuerst - die Auswahl ist zu entscheiden:
Upgrade-Anweisung: ein Schritt in instructions/upgrade-instance.md nach dem Verifizieren (Schritt 9 oder 13): "ENVIRONMENT.md gegen den Checkout lesen" mit der Liste oben als Pruefpunkten. Plus ein Satz in jeder Migration, die Einstellungen, Dateien oder Gates verschiebt (zuerst 10.0.0-settings-tiers).
Vorlage: Abschnitt "Nichts festschreiben, was eine Quelle hat" - Version und Einstellungswerte nicht als Wert eintragen, sondern den Befehl nennen, der sie liefert. Dazu ein Datum "zuletzt geprueft" als Pflichtzeile, damit Alter sichtbar wird.
doctor: kein FAIL (die Optionalitaet bleibt), aber eine WARN bei Behauptungen, die sich billig pruefen lassen: genannte Dateinamen im Wurzelverzeichnis, die es nicht gibt (z.B. .wikitool-*.json), genannte Remote-URLs, die nicht in git remote -v stehen, und ein "zuletzt geprueft"-Datum, das aelter ist als das letzte Upgrade (.wikitool-release.json).
Pruefpunkt in wiki-lint: ein Schritt, der die Datei neben doctor liest. Verworfen: ein eigenes Kommando - bei einer optionalen Datei zu viel Apparat.
Verworfen: die Datei zu generieren. Sie soll genau das festhalten, was sich nicht aus dem Checkout ableiten laesst (Harness, MCP-Server, Absicht); ein generierter Inhalt waere die Dublette der Quellen.
Akzeptanzkriterien
Entscheidung dokumentiert, welche der Stufen 1-4 umgesetzt werden und warum
instructions/upgrade-instance.md nennt den Pruefschritt und die Pruefpunkte (falls Stufe 1)
ENVIRONMENT.md.template trennt Konstanten von ableitbaren Werten und traegt eine "zuletzt geprueft"-Zeile (falls Stufe 2)
check_environment meldet WARN fuer mindestens: nicht (mehr) existierende genannte Einstellungsdateien und veraltetes Pruefdatum; bleibt bei absent und bei gefuellter, plausibler Datei OK (falls Stufe 3)
Test fuer check_environment mit veralteter Datei
docs verify, instructions verify sauber, CHANGES.md und betroffene Referenzseiten nachgezogen
Herkunft
Aufgefallen in einem Lint-Lauf einer ausgelieferten, privaten Instanz nach drei Upgrade-Spruengen. Der Issue-Text enthaelt keine Inhalte der Instanz; die genannten Werte sind Stack-Versionen, Dateinamen und Zeilen des Stacks. Verwandt: #24 (Einfuehrung der Datei), #34 (gleiche Wurzel, anderer Anlass), #81 (Harness-Drift beim Laden).
## Befund
In einer ausgelieferten Instanz war `ENVIRONMENT.md` nach einem Upgrade-Lauf sachlich falsch, ohne dass irgendein Werkzeug es gemeldet hat. Gemessen (Abgleich der Datei mit dem Checkout, 2026-10-19):
| Aussage in der Datei | Tatsaechlicher Stand |
|---|---|
| Stack "per `upgrade-instance.md` auf 8.0.0 gehoben" | `wikitool version`: 10.0.0, exportiert 2026-10-13; Upgrade-Commits vom selben Tag liegen im Git-Log |
| "`.wikitool-remotes.json` existiert noch nicht, das Publish-Remote-Gate ist daher nicht scharf" | Die Datei ist seit 10.0.0 kein Konzept mehr (`instructions/migrations/10.0.0-settings-tiers.md:1-20`); das Gate haengt an `remotes.allowed_push_urls` in `.wikitool-local.json`. Die Schlussfolgerung (nicht scharf) stimmt zufaellig noch, die Begruendung nicht |
| "Telemetrie ist eingeschaltet (`.wikitool-telemetry.json`)" | Die Datei existiert nicht mehr; die Einstellung steht in `.wikitool-local.json` (`telemetry.enabled`) |
| Abschnitt "Connectoren" fehlte ganz | Ein Aufgaben-Backend (CalDAV) ist seit dem Upgrade konfiguriert (`wikitool.json`, `doctor`: `tasks-provider`) - genau die Art Konstante, die der Abschnitt aufnehmen soll |
`doctor` meldete in dieser Zeit durchgehend `environment: OK ... present and filled`.
Es ist nicht der erste Fall dieser Art: #34 (Datei beschrieb ein Gate als gesetzt, das im Checkout inert war) hatte dieselbe Wurzel.
## Ursache
Die Datei wird genau einmal angelegt und danach von nichts mehr beruehrt:
- `instructions/bootstrap.md:64-73` und `instructions/setup-instance.md:271-276` legen sie an bzw. bieten es an. Beide sind Einmal-Schritte.
- `instructions/upgrade-instance.md` hat keinen Schritt, der sie anfasst. Sie kommt dort nur in der Klassifizierungstabelle vor (Zeile 130) mit der Aussage, dass sie nie klassifiziert wird. Das ist richtig fuer die Dateiebene, laesst aber die inhaltliche Ebene unbeachtet: ein Upgrade aendert Dinge, die in der Datei stehen koennen.
- `tools/chemenu/commands/doctor.py:402-428` (`check_environment`) prueft nur "fehlt" und "Template-Sentinel noch drin". Das ist so gewollt (Docstring: optional, kein FAIL), aber es heisst auch: ein gefuellter, falscher Inhalt ist fuer `doctor` nicht von einem richtigen zu unterscheiden.
- `ENVIRONMENT.md.template:23-25` sagt "when something here stops being true, correct it" - wer das tun soll und wann, sagt nichts.
- Die Vorlage und die Setup-Anweisung ermuntern implizit, ableitbare Werte (Version, Dateinamen der Einstellungen) als Freitext festzuhalten. Diese haben eine eigene Quelle (`.wikitool-release.json`, `config`) und veralten damit zwangslaeufig: Verstoss gegen "eine Regel, ein Ort" im Kleinen.
Nicht gemessen, sondern angenommen: dass jede Instanz mit einer vor dem Upgrade gefuellten Datei denselben Drift hat.
## In der Breite: wo kann eine ENVIRONMENT.md noch veralten?
Zu pruefen und je Zeile zu entscheiden (Hinweis im Schritt, Check, Vorlage aendern, nichts tun):
| Ausloeser | Was in der Datei falsch werden kann | Heute abgedeckt? |
|---|---|---|
| `dist upgrade` / Migrationen (z.B. 10.0.0: Einstellungsdateien aufgeloest) | Version, Dateinamen, Gate-/Telemetrie-Beschreibung, Skill-Liste | nein |
| `instructions sync` mit neuen oder entfernten Skills | Abschnitt "Skills" | nein |
| `config set` / `config migrate` (neues Backend, Tracker, Backup, Intake) | Abschnitt "Connectoren", Hinweise zu Gate und Telemetrie | nein |
| MCP-Server kommt hinzu oder faellt weg (Harness-Konfiguration liegt ausserhalb des Repos) | Tabelle "MCP-Server" | nein, und von aussen nicht pruefbar |
| `git remote add/set-url`, Umzug des Publish-Ziels | Abschnitt "Git-Remotes" | `doctor` zeigt den Remote, vergleicht ihn aber nicht |
| Wechsel oder Dazukommen eines Harness | Abschnitt "Harness" | nein |
| CI wird eingefuehrt oder abgeschaltet | Abschnitt "CI" | nein |
| Zweiter Checkout derselben Instanz | Datei ist pro Checkout, also je Maschine eigener Drift; `backup` spiegelt sie nur (`tools/chemenu/backup.py:57`) | nur gespiegelt, nicht geprueft |
## Loesungsvorschlag
Gestaffelt, billigstes zuerst - die Auswahl ist zu entscheiden:
1. **Upgrade-Anweisung:** ein Schritt in `instructions/upgrade-instance.md` nach dem Verifizieren (Schritt 9 oder 13): "ENVIRONMENT.md gegen den Checkout lesen" mit der Liste oben als Pruefpunkten. Plus ein Satz in jeder Migration, die Einstellungen, Dateien oder Gates verschiebt (zuerst `10.0.0-settings-tiers`).
2. **Vorlage:** Abschnitt "Nichts festschreiben, was eine Quelle hat" - Version und Einstellungswerte nicht als Wert eintragen, sondern den Befehl nennen, der sie liefert. Dazu ein Datum "zuletzt geprueft" als Pflichtzeile, damit Alter sichtbar wird.
3. **`doctor`:** kein FAIL (die Optionalitaet bleibt), aber eine WARN bei Behauptungen, die sich billig pruefen lassen: genannte Dateinamen im Wurzelverzeichnis, die es nicht gibt (z.B. `.wikitool-*.json`), genannte Remote-URLs, die nicht in `git remote -v` stehen, und ein "zuletzt geprueft"-Datum, das aelter ist als das letzte Upgrade (`.wikitool-release.json`).
4. **Pruefpunkt in `wiki-lint`:** ein Schritt, der die Datei neben `doctor` liest. Verworfen: ein eigenes Kommando - bei einer optionalen Datei zu viel Apparat.
Verworfen: die Datei zu generieren. Sie soll genau das festhalten, was sich nicht aus dem Checkout ableiten laesst (Harness, MCP-Server, Absicht); ein generierter Inhalt waere die Dublette der Quellen.
## Akzeptanzkriterien
- [ ] Entscheidung dokumentiert, welche der Stufen 1-4 umgesetzt werden und warum
- [ ] `instructions/upgrade-instance.md` nennt den Pruefschritt und die Pruefpunkte (falls Stufe 1)
- [ ] `ENVIRONMENT.md.template` trennt Konstanten von ableitbaren Werten und traegt eine "zuletzt geprueft"-Zeile (falls Stufe 2)
- [ ] `check_environment` meldet WARN fuer mindestens: nicht (mehr) existierende genannte Einstellungsdateien und veraltetes Pruefdatum; bleibt bei `absent` und bei gefuellter, plausibler Datei `OK` (falls Stufe 3)
- [ ] Test fuer `check_environment` mit veralteter Datei
- [ ] `docs verify`, `instructions verify` sauber, `CHANGES.md` und betroffene Referenzseiten nachgezogen
## Herkunft
Aufgefallen in einem Lint-Lauf einer ausgelieferten, privaten Instanz nach drei Upgrade-Spruengen. Der Issue-Text enthaelt keine Inhalte der Instanz; die genannten Werte sind Stack-Versionen, Dateinamen und Zeilen des Stacks. Verwandt: #24 (Einfuehrung der Datei), #34 (gleiche Wurzel, anderer Anlass), #81 (Harness-Drift beim Laden).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Befund
In einer ausgelieferten Instanz war
ENVIRONMENT.mdnach einem Upgrade-Lauf sachlich falsch, ohne dass irgendein Werkzeug es gemeldet hat. Gemessen (Abgleich der Datei mit dem Checkout, 2026-10-19):upgrade-instance.mdauf 8.0.0 gehoben"wikitool version: 10.0.0, exportiert 2026-10-13; Upgrade-Commits vom selben Tag liegen im Git-Log.wikitool-remotes.jsonexistiert noch nicht, das Publish-Remote-Gate ist daher nicht scharf"instructions/migrations/10.0.0-settings-tiers.md:1-20); das Gate haengt anremotes.allowed_push_urlsin.wikitool-local.json. Die Schlussfolgerung (nicht scharf) stimmt zufaellig noch, die Begruendung nicht.wikitool-telemetry.json)".wikitool-local.json(telemetry.enabled)wikitool.json,doctor:tasks-provider) - genau die Art Konstante, die der Abschnitt aufnehmen solldoctormeldete in dieser Zeit durchgehendenvironment: OK ... present and filled.Es ist nicht der erste Fall dieser Art: #34 (Datei beschrieb ein Gate als gesetzt, das im Checkout inert war) hatte dieselbe Wurzel.
Ursache
Die Datei wird genau einmal angelegt und danach von nichts mehr beruehrt:
instructions/bootstrap.md:64-73undinstructions/setup-instance.md:271-276legen sie an bzw. bieten es an. Beide sind Einmal-Schritte.instructions/upgrade-instance.mdhat keinen Schritt, der sie anfasst. Sie kommt dort nur in der Klassifizierungstabelle vor (Zeile 130) mit der Aussage, dass sie nie klassifiziert wird. Das ist richtig fuer die Dateiebene, laesst aber die inhaltliche Ebene unbeachtet: ein Upgrade aendert Dinge, die in der Datei stehen koennen.tools/chemenu/commands/doctor.py:402-428(check_environment) prueft nur "fehlt" und "Template-Sentinel noch drin". Das ist so gewollt (Docstring: optional, kein FAIL), aber es heisst auch: ein gefuellter, falscher Inhalt ist fuerdoctornicht von einem richtigen zu unterscheiden.ENVIRONMENT.md.template:23-25sagt "when something here stops being true, correct it" - wer das tun soll und wann, sagt nichts..wikitool-release.json,config) und veralten damit zwangslaeufig: Verstoss gegen "eine Regel, ein Ort" im Kleinen.Nicht gemessen, sondern angenommen: dass jede Instanz mit einer vor dem Upgrade gefuellten Datei denselben Drift hat.
In der Breite: wo kann eine ENVIRONMENT.md noch veralten?
Zu pruefen und je Zeile zu entscheiden (Hinweis im Schritt, Check, Vorlage aendern, nichts tun):
dist upgrade/ Migrationen (z.B. 10.0.0: Einstellungsdateien aufgeloest)instructions syncmit neuen oder entfernten Skillsconfig set/config migrate(neues Backend, Tracker, Backup, Intake)git remote add/set-url, Umzug des Publish-Zielsdoctorzeigt den Remote, vergleicht ihn aber nichtbackupspiegelt sie nur (tools/chemenu/backup.py:57)Loesungsvorschlag
Gestaffelt, billigstes zuerst - die Auswahl ist zu entscheiden:
instructions/upgrade-instance.mdnach dem Verifizieren (Schritt 9 oder 13): "ENVIRONMENT.md gegen den Checkout lesen" mit der Liste oben als Pruefpunkten. Plus ein Satz in jeder Migration, die Einstellungen, Dateien oder Gates verschiebt (zuerst10.0.0-settings-tiers).doctor: kein FAIL (die Optionalitaet bleibt), aber eine WARN bei Behauptungen, die sich billig pruefen lassen: genannte Dateinamen im Wurzelverzeichnis, die es nicht gibt (z.B..wikitool-*.json), genannte Remote-URLs, die nicht ingit remote -vstehen, und ein "zuletzt geprueft"-Datum, das aelter ist als das letzte Upgrade (.wikitool-release.json).wiki-lint: ein Schritt, der die Datei nebendoctorliest. Verworfen: ein eigenes Kommando - bei einer optionalen Datei zu viel Apparat.Verworfen: die Datei zu generieren. Sie soll genau das festhalten, was sich nicht aus dem Checkout ableiten laesst (Harness, MCP-Server, Absicht); ein generierter Inhalt waere die Dublette der Quellen.
Akzeptanzkriterien
instructions/upgrade-instance.mdnennt den Pruefschritt und die Pruefpunkte (falls Stufe 1)ENVIRONMENT.md.templatetrennt Konstanten von ableitbaren Werten und traegt eine "zuletzt geprueft"-Zeile (falls Stufe 2)check_environmentmeldet WARN fuer mindestens: nicht (mehr) existierende genannte Einstellungsdateien und veraltetes Pruefdatum; bleibt beiabsentund bei gefuellter, plausibler DateiOK(falls Stufe 3)check_environmentmit veralteter Dateidocs verify,instructions verifysauber,CHANGES.mdund betroffene Referenzseiten nachgezogenHerkunft
Aufgefallen in einem Lint-Lauf einer ausgelieferten, privaten Instanz nach drei Upgrade-Spruengen. Der Issue-Text enthaelt keine Inhalte der Instanz; die genannten Werte sind Stack-Versionen, Dateinamen und Zeilen des Stacks. Verwandt: #24 (Einfuehrung der Datei), #34 (gleiche Wurzel, anderer Anlass), #81 (Harness-Drift beim Laden).