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 frei. Verworfen: `$` (Preis-Kollision), `%` (ein Tippfehler vom
Auskommentieren), `:` (zu nah an `:#…`), `§` (fehlt auf US-Tastaturen), `*` Auskommentieren), `:` (zu nah an `:#…`), `§` (fehlt auf US-Tastaturen), `*`
(Markdown, schon in D29 verworfen). (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 Bearbeitungsstand des Knotens selbst. Effektiv fertig ist er erst, wenn auch
seine Abhängigkeiten es sind. Der effektive Status wird gerechnet, nie seine Abhängigkeiten es sind. Der effektive Status wird gerechnet, nie
geschrieben. 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 eine** Alternative realisiert werden darf. Für die Pfadrechnung ändert das
nichts (die wählt bei `|` ohnehin eine); es kommt eine Regel hinzu, die nichts (die wählt bei `|` ohnehin eine); es kommt eine Regel hinzu, die
verletzt werden kann und dann gemeldet wird. 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 Zerlegungszeichen — und ob eingeklappte Teilbäume in Grafikexport und Druck
eingeklappt bleiben. eingeklappt bleiben.
### XOR — genau eine Alternative (`x`) ### XOR — genau eine Alternative (`=`)
Neben `-` (all of), `+` (Zugabe) und `|` (any of, **mindestens** eine) soll es Neben `-` (all of), `+` (Zugabe) und `|` (any of, **mindestens** eine) soll es
eine Gruppe geben, in der **genau eine** Alternative realisiert werden darf. eine Gruppe geben, in der **genau eine** Alternative realisiert werden darf.
Vorgeschlagenes Zeichen: `x`, an derselben Stelle wie die übrigen Zeichen: **`=`**, an derselben Stelle wie die übrigen Zerlegungszeichen
Zerlegungszeichen. (entschieden; Begründung und verworfene Kandidaten: D34-Nachtrag).
- Für den günstigsten Pfad ändert das nichts: Der wählt bei `|` ohnehin genau - 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 eine (§9). XOR fügt eine **Regel** hinzu, die verletzt werden kann — zwei
realisierte Alternativen ergeben eine Warnung. realisierte Alternativen ergeben eine Warnung.
- **Offen** bleibt das Zeichen: `x` kollidiert nicht beim Parsen (das - `=` ist **disjunktiv** wie `|`; die Mischregel aus §3 gilt entsprechend:
Zerlegungszeichen steht vor der Statusbox), aber `x [x] …` liest sich Eine Gruppe ist einheitlich `-`/`+`, einheitlich `|` oder einheitlich `=`
schlecht, weil `x` zugleich der Statuscode für *fertig* ist. 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 ### Knotenbeschreibungen
+3 -1
View File
@@ -82,6 +82,8 @@ entscheiden, **bevor** Code entsteht.
- [ ] Querverbindungen zeichnen (eigene SVG-Ebene, optisch sekundär); - [ ] Querverbindungen zeichnen (eigene SVG-Ebene, optisch sekundär);
bei ausgewähltem Knoten ein-/ausgehende hervorheben. bei ausgewähltem Knoten ein-/ausgehende hervorheben.
- [ ] Faltmarken `>` / `<` parsen; interaktives Auf-/Zuklappen im Diagramm. - [ ] 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 - [ ] Knotenbeschreibungen: Schreibweise für kurze und lange Form festlegen
(Einrückung ist bereits Hierarchie), dann Tooltip/Pop-up. (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) - [?] Effective status: intrinsic, plus what it depends on (S)
- [?] Cycles are legal — they mean "finished together" (XS) - [?] Cycles are legal — they mean "finished together" (XS)
- [ ] An id with no node behind it is a warning (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) - [?] Node descriptions, shown as a tooltip or pop-up (M)
- [?] A short text right at the node (S) %% indentation already means hierarchy - [?] A short text right at the node (S) %% indentation already means hierarchy
- [?] A long block at the end, addressed by its id (S) - [?] A long block at the end, addressed by its id (S)