diff --git a/docs/DECISIONS.md b/docs/DECISIONS.md index beace2e..fded52b 100644 --- a/docs/DECISIONS.md +++ b/docs/DECISIONS.md @@ -1545,3 +1545,32 @@ mit `:#id` überholt — ein Verweis auf den Titel bricht beim Umbenennen, und R ist in dieser Palette nicht vergeben (SPEC §4 nutzt Pastelltöne für Status, `--warn` für Hinweise). Die Datei ist entsprechend korrigiert; die dortigen Phasen bleiben, was sie sind: eine Wunschliste, kein Beschluss. + +**Nachtrag — die `#`-Doppelrolle ist aufgelöst, durch Wegfall statt Trennregel.** +Entschieden: **Ticket-Referenzen haben auf `#` Vorrang** — `#123` ist die +etablierte Kurzschreibweise, und oft ist die Ticket-Nummer ohnehin die +natürliche Knoten-ID; die beiden Rollen vertragen sich (numerisch = Ticket als +Heuristik, notfalls Präfix-Konvention wie `#t123`). Knifflig bleibt allein das +heuristische Erzeugen von Taiga-Links — das ist benannt und liegt beim +Taiga-Spike. + +**Freie Schlagworte verlassen `#` und gehen auf `&tag`** — als **niedrig +priorisierte Idee**, ausdrücklich ungebaut. Der Schritt zurück („wofür brauchen +wir überhaupt Tags?") ergab: Es gibt bisher keinen Konsumenten. Die +Reservierung stammt aus D7 als Beifang der Kommentarzeichen-Entscheidung; kein +geplantes Feature wertet Schlagworte aus. Ihr einziges echtes Argument ist, +dass der Baum genau **eine** Zerlegung ist — ein Tag benennt eine **Menge** von +Knoten quer dazu (die ID benennt einen, Abhängigkeiten verbinden Paare). Ohne +Auswerter (Filter-/Hervorheben-Linse im Diagramm, Taiga-Label-Sync) sind Tags +nur Kommentare mit Extra-Syntax; `%% frontend` sagt dem Leser heute dasselbe. +Gebaut werden sie deshalb erst **zusammen mit** dem ersten Konsumenten. + +Zeichenwahl `&` nach den D32-Kriterien (schnell zu tippen, kollisionsfrei, +keine Markdown-Bedeutung): Shift-Taste auf DE- wie US-Layout, nie ein Dead-Key +— anders als `~`, das auf deutschen Macs hinter Alt+N klemmt und mit +Zirka-Angaben („~3 Wochen") kollidiert. „R&D" und „Drag & Drop" bleiben durch +die Alleinstehend-Regel (wie `!!!`) Labels. Der Einwand „`&` heißt und" trägt +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). diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index cd3d8e5..7de8f62 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -104,6 +104,13 @@ Tastendruck ein Commit); und wer bei einem Backend eigentlich was darf erweitert D18 (heute rein statisch/kostenminimierend) um Nutzen- und Status-/Zeitachse. - Attribut-Syntax für Termine/Meilensteine. +- Schlagworte `&tag` mit einer Filter-/Hervorheben-Linse im Diagramm: Der Baum + ist genau eine Zerlegung — ein Tag benennt eine Menge von Knoten quer dazu + (z. B. `&frontend` in feature-geschnittenen Slices). Schreibweise reserviert + (SPEC §11, D34-Nachtrag); bewusst erst zusammen mit dem ersten Konsumenten + bauen (Linse oder Taiga-Label-Sync) — ohne Auswerter sind Tags nur + Kommentare mit Extra-Syntax. Die Inversions-Mechanik der Linse gibt es durch + den günstigsten Pfad (D18) schon. ## Vollständiges Lean-Pathfinding diff --git a/docs/SPEC.md b/docs/SPEC.md index d273cc0..c3adde2 100644 --- a/docs/SPEC.md +++ b/docs/SPEC.md @@ -508,21 +508,34 @@ anderweitig verwenden** — nicht: schon entschieden. Die endgültige Schreibwei wird hier festgelegt, **bevor** sie gebaut wird; wo unten „offen“ steht, ist sie das auch. Begründung und Zusammenhang: D34. -### Referenzen, Schlagworte und Knoten-IDs (`#`) +### Referenzen und Knoten-IDs (`#`) - `#123` — Referenz auf externe Tickets (geplant für Taiga-Integration). -- `#tag` — freie Schlagworte. + Ticket-Referenzen werden **so** notiert, weil es die etablierte + Kurzschreibweise ist; sie haben unter den `#`-Verwendungen Vorrang. - `#auth` — **Knoten-ID**: ein whitespace-freier Bezeichner, der einen Knoten im ganzen Dokument eindeutig benennt. Ziel für Abhängigkeiten und Beschreibungsblöcke (siehe unten). Zwei Knoten mit derselben ID sind ein Fehler und bekommen eine Warnung mit Zeilennummer (§4). -**Offen: `#` trägt damit drei Bedeutungen.** `#123` ist rein numerisch und -bleibt unterscheidbar; **ID und Schlagwort sehen einander gleich**. Vor der -Implementierung ist eine Trennregel zu entscheiden — etwa „das erste -`#`-Token einer Zeile ist die ID, jedes weitere ein Schlagwort“ oder ein -eigenes Zeichen für eine der beiden Rollen. Solange das offen ist, ist auch -`#tag` nicht gebaut. +Beide Rollen vertragen sich: Oft **ist** die Ticket-Nummer die natürliche +Knoten-ID. Als Ticket-Link behandelt wird heuristisch das rein **numerische** +`#123`; wo das nicht reicht, schafft eine Präfix-Konvention (z. B. `#t123`) +Eindeutigkeit. Freie Schlagworte liegen **nicht** mehr auf `#` — siehe `&tag` +unten; damit ist die frühere Dreifach-Rolle von `#` aufgelöst (D34). + +### Schlagworte (`&tag`) — reserviert, bewusst ungebaut + +- `&tag` — freies Schlagwort: benennt eine **Menge** von Knoten quer zur + Hierarchie (die ID benennt genau einen). Mehrere pro Zeile, Position egal, + gleiche Zeichenmenge wie `@name` (§7: Unicode-Buchstaben, Ziffern, `.`, + `_`, `-`). +- Erkannt nur **alleinstehend** angesetzt (`(^|\s)&\w`, wie `!!!` in §1) — + „R&D“ und „Drag & Drop“ bleiben damit gewöhnliche Labels. +- **Niedrig priorisiert:** Ohne ein Feature, das Schlagworte auswertet + (Filter-/Hervorheben-Linse, Taiga-Label-Sync), sind sie nur Kommentare mit + Extra-Syntax — gebaut werden sie erst **zusammen mit** dem ersten solchen + Konsumenten. Bis dahin gilt allein: `&` nicht anderweitig vergeben. ### Abhängigkeiten zwischen Knoten (`:#auth,#api`) diff --git a/docs/TASKS.md b/docs/TASKS.md index 113134d..44f16b5 100644 --- a/docs/TASKS.md +++ b/docs/TASKS.md @@ -66,8 +66,11 @@ Reihenfolge ist nicht beliebig: ohne IDs keine Abhängigkeiten, ohne die keinen effektiven Status und keine Closure-Rechnung. Jeder Punkt beginnt in [SPEC §11](SPEC.md) — die dort benannten offenen Schreibweisen sind zu entscheiden, **bevor** Code entsteht. -- [ ] `#`-Doppelrolle auflösen (Knoten-ID vs. Schlagwort) und in SPEC §11 - festschreiben; `#tag` hängt an derselben Entscheidung. +- [x] `#`-Doppelrolle auflösen und in SPEC §11 festschreiben. + → Durch Wegfall statt Trennregel: Tickets haben Vorrang (`#123` + numerisch, oft zugleich die natürliche Knoten-ID; notfalls Präfix wie + `#t123`); Schlagworte gehen auf `&tag` — niedrig priorisiert, gebaut + erst mit dem ersten Konsumenten (D34-Nachtrag). - [ ] Knoten-IDs parsen; doppelte ID → Warnung mit Zeilennummer. - [ ] Abhängigkeiten `:#a,#b` parsen; unbekannte ID → Warnung, Zyklen erlaubt. - [ ] Effektiven Status rechnen (intrinsisch + Abhängigkeiten); Darstellung diff --git a/docs/examples/werkbaum.werkbaum b/docs/examples/werkbaum.werkbaum index 8dbc60a..0391388 100644 --- a/docs/examples/werkbaum.werkbaum +++ b/docs/examples/werkbaum.werkbaum @@ -9,7 +9,9 @@ - [^] People tags, bare URLs, %% comments (XS) - [^] And/or decomposition (S) - [^] Optional nodes — neither required nor an alternative (S) - - [?] Node IDs, #auth (S) %% but # already means tickets and tags, see SPEC §11 + - [?] Node IDs, #auth (S) %% often just the ticket number, see SPEC §11 + + [?] Free tags, &tag (M) %% only together with a consumer, see D34 + - [?] A lens: highlight every node tagged &x (S) - [?] Dependencies across the tree, :#auth,#api (M) - [?] They constrain the status, not when work may start (S) - [?] Effective status: intrinsic, plus what it depends on (S)