Nichts erzwingt, dass eine neue Tool-Umgebungsvariable in _WIKITOOL_ENV landet #23
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Der Anlass
1.7.1(#8) hat die Testsuite gegen stille Umgebungsabhängigkeiten gehärtet: die autouse-Fixturehermetic_environmentintools/chemenu/tests/conftest.pylöscht vor jedem Test die Variablen, diewikitoolselbst liest, und listet sie dafür in_WIKITOOL_ENVauf.Stand 2026-09-04, geprüft gegen 4.5.0:
Diese Liste ist von Hand gepflegt.
instructions/dev/testing-conventions.mdschreibt in Schritt 4 vor, eine neue Variable in derselben Änderung nachzutragen — aber das ist eine Prosa-Regel, und die Prämisse von #8 war gerade, dass eine Prosa-Regel diesen Fehler nicht verhindert. Vier Tests haben die Abhängigkeit nacheinander eingeschleppt, der dritte und vierte von jemandem, der das Issue vorher gelesen hatte.Der Befund ist inzwischen belegt, nicht mehr vermutet
CHEMENU_ROOTist der achte Eintrag oben und kam mit 2.3.0 (#31, Root-Auflösung) dazu — von Hand nachgetragen, genau auf dem Weg, den dieses Issue als unzuverlässig beschreibt. Es hat diesmal geklappt. Das ist die Sorte Beleg, die nichts entkräftet: das Issue behauptet nicht, dass der Nachtrag immer vergessen wird, sondern dass nichts ihn erzwingt. #36 führt denselben Punkt als sein einziges nicht mitgelöstes loses Ende.Wichtig für eine kalte Sitzung: der vollständig aussehende Codeblock oben heißt nicht, dass das Issue erledigt ist. Er ist der Ist-Zustand, den der geforderte Test absichern soll — die Lücke ist der fehlende Test, nicht ein fehlender Listeneintrag.
Die Lücke, konkret
Wer
WIKI_SOMETHING_NEWinchemenu/einführt undconftest.pynicht anfasst, bekommt keinen roten Test. Er bekommt eine Suite, die auf seiner Maschine grün ist, weil er die Variable nicht gesetzt hat — und die irgendwann bei jemandem umfällt, der sie gesetzt hat. Also exakt das Versagen aus #8, eine Ebene höher verschoben: von „ein Test liest die Umgebung" zu „der Schutz vor dem Lesen der Umgebung ist unvollständig, und nichts sagt es".test_hermetic_env.pyprüft, dass die gelisteten Variablen geleert sind. Es kann nicht prüfen, dass die Liste vollständig ist — dafür müsste es wissen, was der Code liest.Vorschlag
Ein Test, der
chemenu/(ohnetests/) nach den Namen absucht, die anos.environ.get,os.environ[...]undos.getenvübergeben werden, und die Menge gegen_WIKITOOL_ENV ∪ {"WIKI_TRACE_DIR"}abgleicht. Statisch überast, nicht per Regex: einast.walküber die geparsten Module findet die Aufrufe zuverlässig und ignoriert Vorkommen in Kommentaren und Docstrings.Bewusst offen zu halten sind zwei Kategorien, und beide brauchen eine explizite Ausnahmeliste mit Begründung im Code:
HOME,PATH,EDITORund Ähnliches. Die Fixture behandeltHOMEseparat (setzen statt löschen), undPATHzu löschen wäre absurd.os.environ.get(prefix + name)kann der Test nicht auflösen; er sollte dann fehlschlagen und zur Ausnahmeliste zwingen, statt still nichts zu finden.WIKI_TRACE_DIRist der dokumentierte Sonderfall: gesetzt statt gelöscht, vonisolated_trace_dir. Der Test muss ihn als abgedeckt akzeptieren, sonst schlägt er sofort fehl.Zu prüfen beim Bauen:
conftest.pyführt neben_WIKITOOL_ENVein zweites Tupel_GIT_ENVfür die Variablen, die git für Identität und Repo-Ort liest (Zeile 144 löscht beide gemeinsam). Der neue Test darf_GIT_ENVnicht als „unbekannt" melden, sondern muss die Vereinigung beider prüfen — oder_GIT_ENVbewusst ausklammern, weil dort nichtchemenu-Code die Variable liest, sondern ein Subprozess.Warum nicht sofort in 1.7.1
Der Schnitt war „Suite härten", und die Härtung stand. Diesen Test dazuzupacken hätte eine zweite, andersartige Prüfung (statische Analyse des Quelltexts) in dieselbe Änderung gezogen. Er ist außerdem für sich genommen nützlich und für sich genommen prüfbar.
Akzeptanzkriterien
chemenu/außerhalb vontests/liest, und schlägt fehl, wenn sie weder in_WIKITOOL_ENVnoch in der begründeten Ausnahmeliste steht._GIT_ENVentschieden und im Code begründet.instructions/dev/testing-conventions.mdSchritt 4 verweist auf den Test statt nur zu ermahnen.Herkunft
Aufgefallen beim Schreiben von
testing-conventions.mdin der Sitzung zu #8: die Regel ließ sich aufschreiben, aber nicht erzwingen. Pfade und der_WIKITOOL_ENV-Auszug in diesem Body sind am 2026-09-04 auf den Stand von 4.5.0 nachgezogen worden — sie zeigten bis dahintools/wiki_tools/…und die siebenstellige Liste ohneCHEMENU_ROOT. Teilerledigung von #29.Changelog: Body auf den Stand von 4.5.0 gebracht (Triage-Sitzung 2026-09-04).
_WIKITOOL_ENV-Auszug korrigiert: er zeigte sieben Einträge, tatsächlich sind es acht —CHEMENU_ROOTkam mit 2.3.0 (#31) dazu. Das war der schädlichste Teil: eine kalte Sitzung konnte den Codeblock gegenconftest.pyhalten, eine Abweichung sehen, die keine ist, und daraus die falsche Aufgabe ableiten.CHEMENU_ROOTwurde von Hand nachgetragen, auf genau dem Weg, den dieses Issue als unzuverlässig beschreibt. Es hat diesmal geklappt — das entkräftet nichts, weil die Behauptung nicht „wird immer vergessen" lautet, sondern „nichts erzwingt es". #36 führt denselben Punkt als sein einziges nicht mitgelöstes loses Ende._GIT_ENVentscheiden.conftest.pyführt das zweite Tupel für die Variablen, die git liest, und löscht beide gemeinsam (Zeile 144); der geplanteast-Test darf sie nicht als „unbekannt" melden.tools/wiki_tools/…→tools/chemenu/…,wiki_tools/→chemenu/(Teilerledigung von #29).Labels unverändert:
area/process,kind/build,prio/planned,size/S. Der Zuschnitt ist derselbe — ein Test plus eine Zeile intesting-conventions.md.