feat(diagram): Personen-Leiste mit Personen-Linse und Belastungsanzeige (D87)
Je @Person eine Pille mit Anteil an der offenen Pfad-Arbeit (D71-Maß), dazu ein Eintrag für Unzugewiesenes — die Anteile summieren auf 100 %. Ein Tipp filtert das Diagramm auf die Knoten der Person: alles andere faltet, ihre Pakete stehen als ▸ n, die Pillen färben petrol. Die Linse ist rein Ansicht und Sitzungssache — in den Text wird nichts geschrieben, in geteilten Dokumenten ginge der persönliche Filter sonst an alle. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
1e1a00f794
commit
deec39e82a
@@ -19,6 +19,8 @@ reverse.
|
||||
|
||||
## 2026-08-27
|
||||
|
||||
- A people bar below the diagram shows each `@person` with their share of the open work on the cheapest path — plus an entry for what is assigned to nobody
|
||||
- Tapping a person filters the diagram to their nodes: everything else folds, their packages stand collapsed as `▸ n`, their pills turn teal — a view-only lens that never writes into the text
|
||||
- Folding regions in the text editor recorded as an idea in the plan — view-only and local, unrelated to the diagram's fold marks, deliberately not sized yet
|
||||
- Fix: the root node's fold chip was white-on-pastel and barely visible — it now looks like every other node's, and the description mark and id line on a coloured root are readable too
|
||||
- The caret on a node off the cheapest path now highlights only the ring — the fill stays pale instead of jumping back to full colour
|
||||
|
||||
@@ -7446,3 +7446,82 @@ lokales Dokument zeigt unverändert seine lokalen Stände. Der Namens-Dialog
|
||||
beim Beitreten blockiert nichts (die Automation wies ihn ab — Dokument lädt,
|
||||
nichts gemerkt, nächstes Mal wird wieder gefragt). 531 Frontend-Tests und
|
||||
der Backend-`check` grün.
|
||||
|
||||
## D87 — Personen-Leiste mit Personen-Linse: eine Fläche für Filter und Belastung
|
||||
Gewünscht: je `@`-Person die zuständigen Knoten hervorheben und alles andere
|
||||
zuklappen — auch unter den explizit benannten Knoten —, dazu eine
|
||||
Belastungsanzeige je Person. Zwei Bedienideen standen im Raum (Menü-Knopf im
|
||||
Diagramm-Kopf oder die Namens-Pillen als Leiste unterm Diagramm); die
|
||||
Entscheidungen fielen als Multiple-Choice-Runde:
|
||||
|
||||
**Die Leiste, nicht der Knopf** — und der Ausschlag ist das zweite Feature:
|
||||
Ein Kopf-Knopf wäre das zwölfte Element in einer dreimal zurechtgemessenen
|
||||
Zeile (D47/D56/D75) und zeigte die Belastung erst hinter einem Klick. Die
|
||||
Leiste trägt beides in einer Fläche — Pille, Balken, Tipp = Linse — und
|
||||
erscheint **nur bei Dokumenten mit Tags**: Für tag-lose Pläne (auch den
|
||||
mitgelieferten) kostet sie nichts.
|
||||
|
||||
**Die Linse ist die erste bewusst rein sichtbare Faltung.** D38 schreibt
|
||||
Falten in den Text — richtig für „so wird dieses Dokument eröffnet", falsch
|
||||
für „zeig mir Annas Arbeit": In einem geteilten Dokument (D76) ginge der
|
||||
persönliche Filter als Textänderung an alle Mitschreiber. Die Linse nutzt
|
||||
deshalb nur die Darstellung (Sitzungszustand wie die News-Vorführung, D58);
|
||||
Hand-Faltungen währenddessen bleiben in einer eigenen Überlagerung
|
||||
(`lensOverrides`), der Falt-Durchschalter beendet die Linse (er arbeitet auf
|
||||
dem Text-Zustand), und die Reihum-Prüfung des Durchschalters ruht solange —
|
||||
sonst würfe der Linsen-Zustand die Position um, obwohl der Text unverändert
|
||||
ist. **Export und Druck folgen ihr trotzdem** (Nutzer-Entscheidung): Die
|
||||
D38-Regel „exportiert wird die sichtbare Struktur, eingeklappte Knoten tragen
|
||||
▸ n" gilt wie überall — „Annas Sicht als Bild teilen" funktioniert damit von
|
||||
selbst.
|
||||
|
||||
**Die Falt-Regel (`personFoldSet`, headless in model.js):** Zu klappt, wer
|
||||
den Tag **selbst trägt** (das „▸ n" vertritt das Paket — mit der
|
||||
D71-Vererbung ist alles darunter ohnehin dessen) und wer in seinem Teilbaum
|
||||
**gar nichts** von der Person hat; offen bleiben genau die Vorfahren-Pfade.
|
||||
Der interessante Fall ist getestet: Ein fremd getaggtes Paket, das tief innen
|
||||
einen Knoten der gesuchten Person enthält, bleibt **offen** — die eigenen
|
||||
Tags eines Knotens entscheiden nur über ihn, nicht über den Pfad hindurch.
|
||||
Nicht faltbare Blatt-Geschwister auf offenen Pfaden bleiben sichtbar —
|
||||
dieselbe Eigenschaft wie beim `path`-Preset (D75); welche Knoten gemeint
|
||||
sind, sagt die **petrol gefärbte Pille** der Person (die Engpass-Warnfarbe
|
||||
gewinnt: eine Warnung wiegt schwerer als eine Auswahl).
|
||||
|
||||
**„Ohne Zuständigen" ist ein eigener, klickbarer Eintrag** (gestrichelte
|
||||
Pille — ein Loch, keine Person): Die Anteile summieren damit ehrlich auf
|
||||
100 % (D71: Unzugewiesenes verwässert sie ohnehin), und seine Linse zeigt,
|
||||
wofür noch niemand eingeteilt ist — jeder Knoten mit **eigenen** Tags klappt
|
||||
zu, die Grenze ins zugewiesene Gebiet. Für Unzugewiesen taugt die
|
||||
Personen-Regel nicht: „kein Tag" ist vorfahren-abgeschlossen (die Wurzel
|
||||
wäre ihr eigener äußerster Vertreter), die Grenz-Formulierung ist die
|
||||
tragfähige Umkehrung.
|
||||
|
||||
**Belastung: Anteile, keine absoluten Zahlen** (Nutzer-Entscheidung). Die
|
||||
Größen sind ordinal (D46) — jede Summe ist eine Näherung, und eine Punktzahl
|
||||
suggerierte Präzision, die die Schätzskala nicht hat. Gerechnet wird mit dem
|
||||
vorhandenen D71-Maß (`assigneeLoads`: Marginalkosten der offenen Pfad-Arbeit,
|
||||
Vererbung, geteilte Beiträge) — **eine** Kostenrechnung im System, Warnung
|
||||
und Anzeige sagen dieselbe Zahl. Bei ausgeschaltetem Pfad-Umschalter wird der
|
||||
Pfad eigens gerechnet (die D75-Linie: die Frage gilt dem Pfad, nicht seiner
|
||||
Anzeige); die Bernstein-Färbung der Engpass-Person bleibt dagegen am
|
||||
sichtbaren Pfad und färbt auch die Leisten-Pille.
|
||||
|
||||
**Eine Person zur Zeit** (Nutzer-Entscheidung): Tipp wechselt, zweiter Tipp
|
||||
auf dieselbe schaltet aus — Mehrfachauswahl kann später dazukommen, umgekehrt
|
||||
nicht. Die Linse erlischt von selbst, wenn es die Person (oder überhaupt
|
||||
Tags) im Dokument nicht mehr gibt, und beim Dokumentwechsel
|
||||
(`loadActiveIntoEditor`, die eine Stelle aus D80).
|
||||
|
||||
**Nebengewinn, notiert:** SPEC §11 reserviert `&tag` ausdrücklich bis zum
|
||||
ersten Konsumenten — „Filter-/Hervorheben-Linse" ist dort wörtlich genannt.
|
||||
Diese Linse baut genau die Mechanik; Schlagworte bekämen sie später
|
||||
geschenkt.
|
||||
|
||||
**Nachgemessen** im Browser an einem Tag-Plan (anna/ben, elf Knoten): Leiste
|
||||
ben 50 % · anna 21 % · ohne Zuständigen 29 % (Summe 100). Annas Linse:
|
||||
`Backend` und `Frontend` als „▸ 2", `Infra` offen mit ihrem CI-Blatt, beide
|
||||
anna-Pillen petrol, Text byte-identisch. Bens Linse hält annas Backend
|
||||
**offen** (sein API liegt darin). Hand-Faltung während der Linse ändert den
|
||||
Text nicht; Ausschalten stellt den textdefinierten Zustand wieder her;
|
||||
Unzugewiesen-Linse klappt genau die getaggten Pakete zu. Tag-loses Dokument:
|
||||
keine Leiste. 538 Tests, davon 7 neue in `tests/lens.test.js`.
|
||||
|
||||
@@ -760,6 +760,41 @@ Termine sagt die Warnung nichts (das tut in dieser Notation ohnehin nichts,
|
||||
keine Pille und damit keine Färbung. Bei ausgeschaltetem Pfad entfällt
|
||||
beides — ohne Pfad gibt es keine offene Front.
|
||||
|
||||
### Personen-Leiste und Personen-Linse
|
||||
Trägt das Dokument `@`-Tags (§7), steht unter dem Diagramm eine **Leiste mit
|
||||
einer Pille je Person** samt **Belastungs-Balken**: ihr Anteil an der offenen
|
||||
Arbeit des günstigsten Pfads — dasselbe Maß wie der Zuständigen-Engpass
|
||||
(oben), mit Vererbung und geteilten Beiträgen; die Bernstein-Färbung der
|
||||
Engpass-Person erscheint auch hier. Angezeigt werden **Anteile, keine
|
||||
absoluten Zahlen** — die Größen sind ordinal, jede Summe ist eine Näherung.
|
||||
Der Rest **ohne Zuständigen** bekommt einen eigenen, gestrichelten Eintrag,
|
||||
damit die Anteile auf 100 % summieren. Gerechnet wird auch bei
|
||||
ausgeschaltetem Pfad-Umschalter (wie die `path`-Voreinstellung des
|
||||
Falt-Durchschalters: die Frage gilt dem Pfad, nicht seiner Anzeige). Ohne
|
||||
Tags gibt es die Leiste nicht.
|
||||
|
||||
Ein **Tipp auf eine Pille schaltet die Personen-Linse**: Sichtbar bleiben nur
|
||||
die Vorfahren-Pfade zu den Knoten dieser Person; die getaggten Knoten selbst
|
||||
stehen **eingeklappt** da — ihr „▸ n“ vertritt das Paket, und mit der
|
||||
Vererbung ist alles darunter ohnehin ihres. Ihre Personen-Pillen an den
|
||||
sichtbaren Knoten färben sich petrol (die Engpass-Warnfarbe gewinnt). Nicht
|
||||
faltbare Geschwister auf offenen Pfaden bleiben stehen — dieselbe
|
||||
Eigenschaft wie bei der Pfad-Voreinstellung des Falt-Durchschalters. Der
|
||||
Eintrag „ohne Zuständigen“ zeigt als Linse die Struktur, deren Arbeit
|
||||
niemandem gehört: Jeder Knoten mit eigenen Tags klappt zu. Ein zweiter Tipp
|
||||
hebt die Linse auf, ein Tipp auf eine andere Person wechselt; es gilt
|
||||
höchstens eine zugleich.
|
||||
|
||||
Die Linse ist **reine Ansicht und Sitzungssache**: Anders als das Falten (§9,
|
||||
`>`/`<`) schreibt sie **nichts** in den Text — in einem geteilten Dokument
|
||||
(`?live=`) ginge der persönliche Filter sonst als Textänderung an alle.
|
||||
Hand-Faltungen während der Linse bleiben ebenso in der Sitzung;
|
||||
Dokumentwechsel und Neuladen setzen zurück, der Falt-Durchschalter beendet
|
||||
die Linse (er arbeitet auf dem Text-Faltzustand). **Grafikexport und Druck
|
||||
folgen der sichtbaren Faltung** wie überall — „die Sicht einer Person als
|
||||
Bild teilen“ funktioniert damit von selbst; die Leiste selbst erscheint in
|
||||
beiden nicht.
|
||||
|
||||
### Diagramm aus einer URL laden (`?sourceUrl=`)
|
||||
Der Editor kann den Notationstext aus einer externen Textdatei beziehen:
|
||||
`…?sourceUrl=https://example.org/plan.txt` (relative Angaben werden gegen die
|
||||
|
||||
@@ -87,6 +87,9 @@
|
||||
- [^] #ed.fold.write: Folding writes the mark back into the text (S) %% one undo step
|
||||
- [^] #ed.fold.preset: The fold button cycles through four presets (S) %% M-and-smaller, off-path, all, none — see D44/D75
|
||||
+ [?] #ed.textfold: Fold regions in the text editor, next to the line numbers %% view-only, unrelated to the > marks; not sized yet
|
||||
- [x] #ed.lens: A people bar with a person lens (M)
|
||||
- [x] #ed.lens.fold: One person's nodes, everything else folds (S) %% view-only, never written into the text
|
||||
- [x] #ed.lens.load: A load bar per person, shares of the open path work (S) %% the D71 measure
|
||||
- [^] #ed.snaps: Earlier states of a document, every ten minutes (S) %% only when something changed
|
||||
- [^] #ed.snaps.manual: Save a state by hand, before a larger change (XS) %% ten minutes is the wrong beat for that moment
|
||||
- [^] #ed.files: Open and save .werkbaum files (S)
|
||||
@@ -619,6 +622,21 @@
|
||||
lines, so this hinges on the parked editor-rebuild question (CodeMirror,
|
||||
D76); deliberately not sized yet.
|
||||
|
||||
#ed.lens
|
||||
A bar below the diagram, one pill per @person, shown only when the
|
||||
document carries tags at all. Tapping a pill filters the diagram to that
|
||||
person's work; an extra entry shows what is assigned to nobody.
|
||||
|
||||
#ed.lens.fold
|
||||
The lens keeps only the ancestor paths to the person's nodes open; their
|
||||
tagged packages stand collapsed. Deliberately view-only: written fold
|
||||
marks would push a personal filter to everyone in a shared document.
|
||||
|
||||
#ed.lens.load
|
||||
Each pill carries a bar with the person's share of the open work on the
|
||||
cheapest path — the same measure as the bottleneck warning, shares
|
||||
rather than absolute numbers because the sizes are ordinal.
|
||||
|
||||
#ed.snaps
|
||||
A safety net against mishaps: the text is put aside every ten minutes, but
|
||||
only when it differs from the last one kept, and the last twenty are offered
|
||||
|
||||
Reference in New Issue
Block a user