Chemenu 2.1.0 - deterministischer Wissenskompiler
Chemenu kompiliert Rohnotizen zu einem verlinkten, quellengebundenen Wiki: raw/ -> types/ + tools/ -> kb/ -> reports/. Was mechanisch ist, macht tools/wikitool; was Urteil braucht, macht ein Agent unter Contracts, deren Grenzen in Code durchgesetzt sind statt im Prompt. Dieser Commit ist der Startpunkt der oeffentlichen Historie. Die vorherige Entwicklung fand in einer privaten Instanz statt und ist nicht Teil dieses Repositorys; ihre Erzaehlung steht vollstaendig in CHANGES.md, das mit 44 Eintraegen von 0.1.0 bis 2.1.0 erhalten geblieben ist. Der mitgelieferte Korpus ist ein Testbett und eine Demo: 170 Seiten ueber den Stack selbst - Gates, Lint, Versionierung, Suche, das Wiki-Muster. Er dokumentiert das Werkzeug mit den eigenen Mitteln des Werkzeugs. Lizenz: AGPL-3.0 fuer den Stack (tools/, types/), CC-BY-4.0 fuer die Inhalte. Die Grenze zwischen beiden ist der Dateiplan, den dist export berechnet - siehe NOTICE.
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
---
|
||||
type: types/concept.md
|
||||
concept_type: problem
|
||||
tags: [tests, regression, tooling, quality]
|
||||
created: 2026-08-31
|
||||
modified: 2026-08-31
|
||||
related: [Command Round-Trip Integrity, wikitool, Denylist over Allowlist, Ambient Environment Dependency, Lint Workflow]
|
||||
sources: [Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31, Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31]
|
||||
confidence: 0.70
|
||||
confidence_base: 0.70
|
||||
provenance: sourced
|
||||
summary: Defekt, der eine vollstaendig gruene Testsuite ueberlebt, weil nie ein Test das richtige Verhalten behauptet hat - belegt an drei prio/1-2-Defekten (Round-Trip, Zitat-Notation-als-Code, Zitat-Limit)
|
||||
---
|
||||
# Green Suite Blind Spot
|
||||
|
||||
**Typ:** Problem
|
||||
|
||||
## Definition
|
||||
|
||||
Ein Green Suite Blind Spot ist ein Defekt, der eine vollständig grüne Testsuite überlebt, weil
|
||||
nie ein Test das *richtige* Verhalten behauptet hat. Die Suite ist nicht falsch und sie ist
|
||||
nicht kaputt - sie prüft nur, wovon sie weiß. Ein nie formuliertes Verhalten kann nicht
|
||||
fehlschlagen, also meldet ein grüner Lauf für diesen Bereich nichts, und die Grünfärbung wird
|
||||
als Aussage über den gesamten Code gelesen statt über den abgedeckten Ausschnitt.
|
||||
|
||||
Die Lücke wächst dort am schnellsten, wo zwei Komponenten sich erst in der Kombination
|
||||
widersprechen: jede für sich ist getestet, das Zusammenspiel hat nie jemand aufgeschrieben.
|
||||
|
||||
## Kernpunkte
|
||||
|
||||
- **Der Beleg aus diesem Stack (2026-08-31):** zwei `prio/1`-Datenintegritätsdefekte lagen unter
|
||||
einer vollständig grünen Suite. 678 Tests waren grün, bevor die Zitat-Tests zu Gitea-Issue #17
|
||||
geschrieben wurden; 67 Gate-Tests waren grün vor der Zählungsänderung desselben Tages. In
|
||||
keinem der beiden Fälle hatte je ein Test das falsche Verhalten festgehalten - genau deshalb
|
||||
hat es überlebt[^s-conversation-two-round-trip-defects-found-by-an-ingest-session-2026-08-31].
|
||||
- **Die Zahl der grünen Tests sagt nichts über den ungetesteten Bereich.** Sie misst, wie viel
|
||||
bekanntes Verhalten abgesichert ist. Ein Defekt in unbekanntem Verhalten ist von einer
|
||||
grünen 678er-Suite genauso wenig ausgeschlossen wie von einer grünen 60er-Suite[^s-conversation-two-round-trip-defects-found-by-an-ingest-session-2026-08-31].
|
||||
- **Das ist etwas anderes als eine falsche Zusicherung.** Ein Test, der das falsche Verhalten
|
||||
festschreibt, wird beim Fix rot und zwingt zur Entscheidung. Der blinde Fleck erzeugt gar
|
||||
keinen Widerstand: der Fix ändert Verhalten, das nie jemand behauptet hat, und die Suite
|
||||
bleibt grün - vorher wie nachher[^s-conversation-two-round-trip-defects-found-by-an-ingest-session-2026-08-31].
|
||||
- **Gegenmittel 1 - den neuen Test rot beweisen, bevor man ihm glaubt.** Bei der Reparatur von
|
||||
Issue #17 wurde nicht behauptet, der neue Test hätte den Defekt gefangen: die alte
|
||||
Implementierung wurde rekonstruiert und gegen ihn laufen gelassen
|
||||
(`ALTER Code -> Beziehungen erhalten: False`, `NEUER Code -> Beziehungen erhalten:
|
||||
True`)[^s-conversation-two-round-trip-defects-found-by-an-ingest-session-2026-08-31].
|
||||
- **Gegenmittel 2 - den Umfang messen statt schätzen.** Der Scan über den Korpus ergab 8 Seiten
|
||||
mit 74 Zeilen in der gefährdeten Position und hielt damit einen laufenden Ingest an, der
|
||||
`cite add` auf genau diese Seiten aufgerufen hätte. Eine Schätzung hätte diese Entscheidung
|
||||
nicht getragen[^s-conversation-two-round-trip-defects-found-by-an-ingest-session-2026-08-31].
|
||||
- **Gegenmittel 3 - einen Bericht aus zweiter Hand nachstellen, nicht übernehmen.** Die
|
||||
Meldungen eines Subagenten wurden am Code nachvollzogen, bevor etwas geändert wurde, und die
|
||||
Prüfung erweiterte den Umfang zweimal: um `rename` und den `cite sync`-Verlustpfad beim
|
||||
ersten Defekt, und um die Feststellung, dass `xref remove` das undeklarierte Feld gar nicht
|
||||
erreichen konnte, beim zweiten[^s-conversation-two-round-trip-defects-found-by-an-ingest-session-2026-08-31].
|
||||
- **Ein dritter Beleg: `lint` maß Zeilenbreite statt Zitat-Anzahl, und niemand hatte je über die
|
||||
eigene Zitat-Syntax geschrieben.** Gitea-Issue #20 stellte selbst fest: "auch dieser Fall war
|
||||
von keinem Test abgedeckt, weil bisher niemand eine Seite über die Zitat-Notation geschrieben
|
||||
hatte." Das Zitat-Limit (Issue #22) zählte parallel `>`-Zeilen statt Zitate - ein Defekt, den
|
||||
eine einzige Testseite mit einem umbrochenen Zitat sofort zeigt, aber den niemand geschrieben
|
||||
hatte, bis eine reale Seite genau das tat. Beide behoben in
|
||||
`1.7.2`.
|
||||
Gegenmittel 1 griff erneut: acht neue Tests wurden gegen eine auf No-op zurückgesetzte
|
||||
Implementierung scharf geprüft und liefen rot, bevor der Fix als bewiesen
|
||||
galt.
|
||||
- **Eine Ablehnung, die auf ein anderes Kommando verweist, ist selbst ein blinder Fleck.** Die
|
||||
Denylist aus `1.4.0` war richtig, ihr Verweisziel nicht: sie behauptete ungeprüft, `xref add`
|
||||
und `xref remove` deckten die Seiten-Referenz-Felder ab, was für eine Source-Seite falsch war.
|
||||
Die Regel dazu steht bei [[Denylist over Allowlist]][^s-conversation-two-round-trip-defects-found-by-an-ingest-session-2026-08-31].
|
||||
- **Der Befund stützt die Prämisse von Gitea-Issue #8** - dass eine grüne Suite kein Beleg für
|
||||
Vollständigkeit ist und ein Bereich seinen eigenen Nachweis braucht[^s-conversation-two-round-trip-defects-found-by-an-ingest-session-2026-08-31].
|
||||
- **Issue #8 wurde am 2026-08-31 mit `1.7.1` geschlossen, und zwar über eine Isolierung der
|
||||
Testausführung statt über weitere Einzeltests**[^s-conversation-hardening-the-test-suite-against-silent-environment-dependencies-session-2026-08-31]. Der dort behandelte Fall ist aber
|
||||
eine eigene Klasse und kein blinder Fleck: dort behauptete ein Test das richtige Verhalten und
|
||||
war grün, weil die Umgebung lieferte, was der Code hätte liefern müssen. Abgrenzung und Beleg
|
||||
bei [[Ambient Environment Dependency]].
|
||||
- **Gegenmittel 1 hat sich dort erneut bewährt.** Vor der Härtung war die Suite unter der
|
||||
gehärteten Umgebung bereits grün (695 Tests), der Schutz also durch keinen roten Lauf belegt.
|
||||
Erst die Gegenprobe - dieselbe Funktion antwortet ohne Isolierung mit dem globalen git-Namen
|
||||
des Entwicklers, mit Isolierung `None` - zeigte, dass er greift[^s-conversation-hardening-the-test-suite-against-silent-environment-dependencies-session-2026-08-31].
|
||||
|
||||
## Beispiele
|
||||
|
||||
- [[wikitool]] - Issue #17 (`cite add` löschte Inhalt hinter dem Fußnotenblock) und Issue #18
|
||||
(Referenz-Arrays einer Source-Seite unerreichbar), beide unter grüner Suite entstanden und
|
||||
beide durch einen Ingest, nicht durch einen Testlauf, gefunden
|
||||
- [[Command Round-Trip Integrity]] - die Defektklasse, die besonders anfällig ist, weil jeder
|
||||
beteiligte Aufruf für sich getestet und für sich korrekt ist
|
||||
- [[Lint Workflow]] - Issue #20 (`[^cite-id]`/`[[Wikilink]]` in Backticks oder einem Fence zählte
|
||||
als echte Referenz) und Issue #22 (Zitat-Limit zählte `>`-Zeilen statt Zitate), beide gefunden
|
||||
bei einer Seite, die tatsächlich über die eigene Notation schrieb, nicht durch einen Testlauf
|
||||
|
||||
## Wann zu verwenden
|
||||
|
||||
- Wenn eine grüne Suite als Argument für die Korrektheit einer Änderung angeführt wird: die
|
||||
Frage ist nicht, wie viele Tests grün sind, sondern welcher Test rot geworden wäre.
|
||||
- Beim Schreiben eines Regressionstests: erst gegen den alten Code laufen lassen. Ein Test, der
|
||||
nie rot war, belegt nichts.
|
||||
- Wenn ein Defekt im Betrieb auffällt statt im Testlauf: die Frage nach dem fehlenden Test
|
||||
gehört zur Ursachenanalyse, nicht zur Nacharbeit.
|
||||
|
||||
## Wann NICHT zu verwenden
|
||||
|
||||
- Als Argument gegen Testabdeckung. Der Befund entwertet keinen einzigen der 678 grünen Tests;
|
||||
er bestreitet nur, dass ihre Zahl eine Aussage über das trifft, was niemand aufgeschrieben
|
||||
hat.
|
||||
- Für Defekte, die ein Test sehr wohl abgedeckt hätte und die durch einen übersprungenen oder
|
||||
nicht ausgeführten Lauf durchgerutscht sind. Das ist ein Prozessfehler, kein blinder Fleck.
|
||||
|
||||
## Verwandte Concepts
|
||||
|
||||
- [[Command Round-Trip Integrity]]
|
||||
- [[Denylist over Allowlist]]
|
||||
- [[Ambient Environment Dependency]]
|
||||
- [[Structural Enforcement over Documented Rule]]
|
||||
|
||||
## Beziehungen
|
||||
|
||||
- **begünstigt:** [[Command Round-Trip Integrity]]
|
||||
- **trat auf in:** [[wikitool]]
|
||||
- **belegt an:** [[Denylist over Allowlist]]
|
||||
- **abzugrenzen von:** [[Ambient Environment Dependency]]
|
||||
- **belegt an:** [[Lint Workflow]]
|
||||
|
||||
## Siehe auch
|
||||
|
||||
- [[Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]]
|
||||
- [[Command Round-Trip Integrity]]
|
||||
- [[wikitool]]
|
||||
- [[Denylist over Allowlist]]
|
||||
- [[Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31]]
|
||||
- [[Ambient Environment Dependency]]
|
||||
- [[Lint Workflow]]
|
||||
|
||||
## Fußnoten
|
||||
|
||||
[^s-conversation-two-round-trip-defects-found-by-an-ingest-session-2026-08-31]: [[Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]]
|
||||
[^s-conversation-hardening-the-test-suite-against-silent-environment-dependencies-session-2026-08-31]: [[Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31]]
|
||||
Reference in New Issue
Block a user