docs: XOR-Zeichen entschieden — = statt x (D34-Nachtrag)

SPEC §11: Zeichen festgelegt (disjunktiv wie `|`, Mischung → mixedGate,
Leerraum-Regel gegen Labels wie =SUMME(…)); offen bleibt nur noch die
Kennzeichnung der Gruppe im Diagramm. D34-Nachtrag begründet die Wahl und
hält die verworfenen Kandidaten fest (x, ^, |1, /, ⊕, °).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-22 15:01:34 +02:00
co-authored by Claude Fable 5
parent 477ef6c812
commit 2754fa40f6
5 changed files with 70 additions and 9 deletions
+50
View File
@@ -1574,3 +1574,53 @@ nicht: Das Und der Notation ist `-` am Zeilenanfang — `&` ist gerade deshalb
frei. Verworfen: `$` (Preis-Kollision), `%` (ein Tippfehler vom
Auskommentieren), `:` (zu nah an `:#…`), `§` (fehlt auf US-Tastaturen), `*`
(Markdown, schon in D29 verworfen).
**Nachtrag — das XOR-Zeichen ist entschieden: `=`.** Das in §11 zunächst
vorgeschlagene `x` ist verworfen; ausschlaggebend war, **wann** seine
Glyph-Kollision auftritt: `x` teilt sich das Zeichen mit dem Statuscode für
*fertig*, und genau eine Alternative einer XOR-Gruppe **soll** fertig werden —
`x [x] …` wäre also der Endzustand jeder entschiedenen Gruppe und stünde
dauerhaft in jedem Plan. Dazu kam ein zweiter, bis dahin unbenannter Befund:
Das Zerlegungszeichen wird ohne erzwungenes Leerzeichen erkannt (`\s*` in der
Referenz-Regex darf leer sein); ein Buchstabe als Gate frisst damit
Label-Anfänge (`XSS-Schutz` → Gate `X`, Label „SS-Schutz“).
`=` ist der einzige Kandidat **ohne jede** Kollision: kein Statuscode, kein
reserviertes Zeichen, keine Markdown-Bedeutung an dieser Position, auf DE-
(Shift+0) wie US-Layout (eigene Taste) direkt tippbar, nirgends Dead-Key. Seine
beiden Schwächen sind benannt und akzeptiert:
- **Die Mnemonik trägt sich nicht selbst** („genau eine“ muss die Legende
sagen) — aber das gilt für `|` („mindestens eine“) genauso; jedes Gate steht
ohnehin in der Legende.
- **Optisch steht `=` neben der konjunktiven Familie** (ein doppeltes `-`),
gehört aber semantisch zu `|`. Dagegen arbeiten zwei Mechanismen: Im Diagramm
bleiben die Linien gestrichelt-grau wie bei any-of (das Bild korrigiert die
Lesart sofort), und jede Mischung mit `=` in einer Gruppe gibt die
`mixedGate`-Warnung.
Die **Leerraum-Regel** (Gate `=` nur mit folgendem Leerraum, §11) ist die
erste ihrer Art; sie hält Labels wie `=SUMME(A1:B2)` heraus und wäre bei jedem
der Kandidaten nötig gewesen.
**Verworfene Kandidaten**, je am entscheidenden Kriterium gescheitert:
- **`x`** — siehe oben; die XOR-Mnemonik (für Informatiker stark) wiegt die
dauerhafte `x [x]`-Paarung nicht auf.
- **`^`** — XOR in C/Python, aber der Dead-Key schlechthin auf deutschen
Tastaturen (nicht nur Mac); ihn zu nehmen widerspräche dem im
`&tag`-Nachtrag festgehaltenen Kriterium. Zudem dieselbe Endzustands-
Kollision wie `x`, nur mit `[^]`: Per D30 befördert der Deploy die gewählte
Alternative auf `[^]``^ [^] …` stünde ausgerechnet im Vorzeigedokument.
- **`|1`** (Zweizeichen-Gate in der Pipe-Familie, „genau 1“) — semantisch die
ehrlichste Form und kollisionsfrei, dem Nutzer aber schlicht nicht gefällig;
Geschmack ist bei einem Zeichen, das man täglich tippt, ein zulässiges
Kriterium.
- **`/`** — das Alltags-Entweder/Oder (ja/nein, m/w/d); teilt sich die Glyphe
mit `[/]` *Durchstich* (immerhin nur ein Durchgangszustand) und mit
Pfad-Labels (`/api/…`).
- **`⊕`** — das echte XOR-Symbol, aber ohne Zeichenpicker auf keiner Tastatur
tippbar; der Moment des Tippens ist der Moment, in dem man nicht über Syntax
nachdenken will (D32).
- **`°`** — fehlt auf US-Layouts, und der kleine Kreis kollidierte semantisch
mit dem hohlen Kreis, der im Diagramm bereits *optional* bedeutet (D29).
+1 -1
View File
@@ -135,7 +135,7 @@ Pfad, der die Wahrheit sagt.
Bearbeitungsstand des Knotens selbst. Effektiv fertig ist er erst, wenn auch
seine Abhängigkeiten es sind. Der effektive Status wird gerechnet, nie
geschrieben.
- **XOR** (`x`) — neben „mindestens eine" (`|`) eine Gruppe, in der **genau
- **XOR** (`=`) — neben „mindestens eine" (`|`) eine Gruppe, in der **genau
eine** Alternative realisiert werden darf. Für die Pfadrechnung ändert das
nichts (die wählt bei `|` ohnehin eine); es kommt eine Regel hinzu, die
verletzt werden kann und dann gemeldet wird.
+15 -6
View File
@@ -596,19 +596,28 @@ die Rechnung schwerer als heute — siehe D34.
Zerlegungszeichen — und ob eingeklappte Teilbäume in Grafikexport und Druck
eingeklappt bleiben.
### XOR — genau eine Alternative (`x`)
### XOR — genau eine Alternative (`=`)
Neben `-` (all of), `+` (Zugabe) und `|` (any of, **mindestens** eine) soll es
eine Gruppe geben, in der **genau eine** Alternative realisiert werden darf.
Vorgeschlagenes Zeichen: `x`, an derselben Stelle wie die übrigen
Zerlegungszeichen.
Zeichen: **`=`**, an derselben Stelle wie die übrigen Zerlegungszeichen
(entschieden; Begründung und verworfene Kandidaten: D34-Nachtrag).
- Für den günstigsten Pfad ändert das nichts: Der wählt bei `|` ohnehin genau
eine (§9). XOR fügt eine **Regel** hinzu, die verletzt werden kann — zwei
realisierte Alternativen ergeben eine Warnung.
- **Offen** bleibt das Zeichen: `x` kollidiert nicht beim Parsen (das
Zerlegungszeichen steht vor der Statusbox), aber `x [x] …` liest sich
schlecht, weil `x` zugleich der Statuscode für *fertig* ist.
- `=` ist **disjunktiv** wie `|`; die Mischregel aus §3 gilt entsprechend:
Eine Gruppe ist einheitlich `-`/`+`, einheitlich `|` oder einheitlich `=`
jede Mischung mit `=` ist ungültig (`mixedGate`). Auch die Darstellung folgt
any-of (gestrichelt in Grau); wie die Gruppe zusätzlich als „genau eine"
gekennzeichnet wird, ist offen (z. B. eine kleine „1" an der Sammelleiste).
- **Leerraum-Regel:** Als Gate wird `=` nur mit **folgendem Leerraum**
erkannt — ein Label wie `=SUMME(A1:B2)` bleibt damit ein Label. `=` ist das
erste Gate, das diese Regel braucht; für `-`/`+`/`|` ändert sich nichts.
- Das ursprünglich vorgeschlagene `x` ist verworfen: `x [x] …` stünde als
Endzustand jeder entschiedenen Gruppe **dauerhaft** im Text (genau eine
Alternative soll ja fertig werden), und als Buchstabe kollidierte es ohne
Leerraum-Regel mit gewöhnlichen Labels (`XSS-Schutz` → Gate `X`).
### Knotenbeschreibungen
+3 -1
View File
@@ -82,6 +82,8 @@ entscheiden, **bevor** Code entsteht.
- [ ] Querverbindungen zeichnen (eigene SVG-Ebene, optisch sekundär);
bei ausgewähltem Knoten ein-/ausgehende hervorheben.
- [ ] Faltmarken `>` / `<` parsen; interaktives Auf-/Zuklappen im Diagramm.
- [ ] XOR-Gruppe (`x`): Zeichen endgültig wählen, parsen, Verletzung melden.
- [ ] XOR-Gruppe (`=`) parsen (nur mit folgendem Leerraum, Mischung →
`mixedGate`), zwei realisierte Alternativen melden.
→ Zeichen entschieden: `=` statt `x` (D34-Nachtrag).
- [ ] Knotenbeschreibungen: Schreibweise für kurze und lange Form festlegen
(Einrückung ist bereits Hierarchie), dann Tooltip/Pop-up.
+1 -1
View File
@@ -17,7 +17,7 @@
- [?] Effective status: intrinsic, plus what it depends on (S)
- [?] Cycles are legal — they mean "finished together" (XS)
- [ ] An id with no node behind it is a warning (XS)
- [?] XOR — exactly one alternative, not at least one (S)
- [?] XOR, = — exactly one alternative, not at least one (S)
- [?] Node descriptions, shown as a tooltip or pop-up (M)
- [?] A short text right at the node (S) %% indentation already means hierarchy
- [?] A long block at the end, addressed by its id (S)