fix(menü): mitgelieferte Dokumente sind nicht mehr umbenennbar (D81-Nachtrag 3)

Ihr Name ist Auslieferungsstand: Wiederherstellen stellt ihn mit her, der
Neu-laden-Vergleich prüft ihn, und ein umbenanntes, aber unverändertes
Beispiel bekäme weiter still neue Fassungen nachgezogen (das Nachziehen
hängt an id + Text-Fingerabdruck, nicht am Namen). Kein Stift an
mitgelieferten Zeilen; renameDoc() prüft es selbst. Löschen bleibt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-27 05:51:41 +02:00
co-authored by Claude Fable 5
parent 4e200e4d9b
commit ca4c6f98d8
5 changed files with 51 additions and 7 deletions
+1
View File
@@ -19,6 +19,7 @@ reverse.
## 2026-08-27
- Shipped documents are no longer renamable — their name is part of the delivered state, and a renamed but unedited example would still silently receive new versions
- Fix: sharing from an instance without its own backend (GitHub Pages) failed with HTTP 405 — the share button now probes the default address and asks for the server instead
## 2026-08-26
+31
View File
@@ -7053,3 +7053,34 @@ steht da, und Löschen fragt nach); Wiederherstellen wirkt nur noch über den
`restoreDoc()` prüft das selbst (`d.id !== activeId` → nichts), statt sich
auf den Aufrufer zu verlassen. Der D81-Haupttext oben beschreibt insoweit
den Zwischenstand von einem Tag.
**Nachtrag 3 — mitgelieferte Dokumente sind nicht mehr umbenennbar.**
Nutzer-Einwand samt Verdacht, das Umbenennen mache „Probleme beim Neuladen".
Die Prüfung ergab: Es bricht nichts — und genau das ist das Problem. Das
Nachziehen neuer Fassungen (D27) hängt an **id und Text-Fingerabdruck**, der
Name spielt keine Rolle: Ein umbenanntes, aber textlich unverändertes
Beispiel bekäme beim nächsten Laden weiter still die neue Fassung — ein
Dokument, das der Nutzer per Umbenennung gedanklich zu seinem gemacht hat,
tauschte ohne Vorwarnung den Inhalt. Dazu zwei Merkwürdigkeiten derselben
Wurzel: Bloßes Umbenennen aktivierte den Neu-laden-Knopf (der Vergleich
prüft Text UND Name), und Wiederherstellen setzte den Namen kommentarlos mit
zurück; und die Menü-Gruppe „Mitgeliefert" zeigte einen fremden Namen, denn
die Gruppierung läuft über die id.
**Entschieden: kein Stift an mitgelieferten Zeilen**, und `renameDoc()`
prüft es selbst statt sich auf das ausgeblendete Symbol zu verlassen. Der
Name gehört bei mitgelieferten Dokumenten zum **Auslieferungsstand** — er
wird beim Wiederherstellen mitgestellt und beim Vergleich mitgeprüft; dann
darf er auch nicht separat editierbar sein. **Löschen bleibt** je Zeile: Das
ist eine andere Aussage („will ich nicht haben"), und das Nachziehen
respektiert sie längst (gelöscht bleibt gelöscht, D27).
Das ist eine **bewusste Abkehr** von der D22/D27-Linie „Dokumentnamen sind
Nutzerdaten, eine Umbenennung bleibt stehen" — für genau diese zwei
Dokumente, deren Name eben keine Nutzerdaten ist, sondern Teil der
Auslieferung. Die Bestandsregeln (Adoption, Namensfix „Werkbank", Umbenennung
überlebt das Nachziehen) bleiben unangetastet: Wer früher umbenannt hat,
behält seinen Namen; nur das UI bietet es nicht mehr an. Wer das Beispiel
als Basis für einen eigenen Plan will, ändert den Text (dann stoppt das
Nachziehen ohnehin) oder legt ein eigenes Dokument an; ein „Duplizieren" im
Menü wäre die saubere Antwort darauf, ist aber ein eigenes Feature.
+2 -1
View File
@@ -532,7 +532,8 @@
#ed.docs.picker
The app header reads "Werkbaum > name": the chip opens the menu, grouped by
kind (shipped, yours, sources), with rename and delete on each row. Restore
kind (shipped, yours, sources), with rename and delete on each row (shipped
ones keep their delivered name). Restore
lives on the editor title bar's reload button instead, acting only on the
open document. The menu scrolls as a whole instead of being cut off on
small screens, and on the phone it is reachable from both panes.
+5
View File
@@ -158,6 +158,11 @@ verworfene Elemente. Quelle sind ES-Module unter `src/`; `index.html` ist der
docurl.js, headless getestet) und trägt Umbenennen/Löschen als Symbole
**je Zeile**`renameDoc/deleteDoc` nehmen deshalb eine **id**, nicht das
aktive Dokument, und Verwaltungs-Aktionen lassen das Menü offen.
**Mitgelieferte Dokumente sind nicht umbenennbar** (D81-Nachtrag 3): kein
Stift an ihrer Zeile, und `renameDoc()` prüft es selbst — ihr Name ist
Auslieferungsstand (Restore stellt ihn wieder her), und ein umbenanntes,
unverändertes Beispiel bekäme weiter still neue Fassungen (das Nachziehen
hängt an id + Text-Fingerabdruck, nicht am Namen).
Wiederherstellen gibt es im Menü bewusst **nicht** (D81-Nachtrag 2): Es
läuft über den Neu-laden-Knopf der Titelzeile und wirkt nur auf das
geöffnete Dokument — `restoreDoc()` prüft das selbst. Die Editor-Titelzeile heißt wieder „Text-Editor" und trägt die
+12 -6
View File
@@ -3577,11 +3577,14 @@ const IC_RENAME = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" st
const IC_DELETE = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 6h18M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"/></svg>';
/* Eine Menüzeile: Wählen-Knopf + Zeilen-Aktionen als GESCHWISTER ein Knopf
im Knopf wäre ungültiges HTML. Die Aktionen sind immer sichtbar (Touch
kennt kein Hover): Umbenennen und Löschen, beides überall. Wiederherstellen
gibt es hier bewusst NICHT (D81-Nachtrag 2): Es wirkt über den
Neu-laden-Knopf der Editor-Titelzeile nur auf das geöffnete Dokument
ein ungeöffnetes zurückzusetzen, ohne zu sehen, was man verwirft, ergäbe
keinen Sinn. */
kennt kein Hover): Löschen überall, Umbenennen nur bei NICHT
mitgelieferten Dokumenten (D81-Nachtrag 3) der Name gehört dort zum
Auslieferungsstand, und ein umbenanntes, aber unverändertes Beispiel
bekäme weiter still neue Fassungen nachgezogen (das Nachziehen hängt an id
und Text-Fingerabdruck, D27). Wiederherstellen gibt es hier ebenfalls
NICHT (D81-Nachtrag 2): Es wirkt über den Neu-laden-Knopf der
Editor-Titelzeile nur auf das geöffnete Dokument ein ungeöffnetes
zurückzusetzen, ohne zu sehen, was man verwirft, ergäbe keinen Sinn. */
function docRowHtml(d){
if(d.id === renamingId){
/* Inline-Umbenennen direkt im Menü (kein window.prompt das ist in
@@ -3604,7 +3607,7 @@ function docRowHtml(d){
`<span class="doccheck" aria-hidden="true">✓</span>` +
`<span class="docitem-name">${esc(d.name)}</span>${zusatz}</button>` +
`<span class="docacts">` +
iconBtn('rename', t('docRename'), IC_RENAME) +
(shippedStateOf(d.id) ? '' : iconBtn('rename', t('docRename'), IC_RENAME)) +
iconBtn('delete', t('docDelete'), IC_DELETE, ' docdelbtn') +
`</span></div>`;
}
@@ -4089,6 +4092,9 @@ function finishNewDoc(){
}
function renameDoc(id){
if(!docs.some(x => x.id === id)) return;
/* Mitgelieferte nicht (D81-Nachtrag 3): Ihr Name ist Auslieferungsstand.
Die Prüfung liegt hier, nicht nur am ausgeblendeten Stift. */
if(shippedStateOf(id)) return;
renamingId = id; /* Zeilen-Aktion (D81): jedes Dokument, nicht nur das aktive */
renameIsNew = false;
renderDocMenu();