Notiz-Handling: anlegen, speichern, umbenennen, loeschen #16
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Destination
Eine Spec, mit der sich das Notiz-Handling am Stück bauen lässt: Notizen anlegen, bearbeiten, speichern, umbenennen und löschen — bis zu dem Punkt, an dem sich DioNotes zwei Wochen lang für echte Notizen benutzen lässt, ohne für irgendetwas davon in ein anderes Programm zu wechseln.
Notes
Domain: DioNotes — lokale Markdown-Notizen-App, Dioxus 0.7, Desktop. Der Workspace-Teil steht: Ordner öffnen, Notiz-Baum, Notiz anzeigen. Der Editor nimmt Eingaben entgegen und wirft sie weg — das ist der Zustand, den diese Map beendet.
Planen, nicht bauen. Jedes Ticket liefert eine Entscheidung. Beim Schreiben auf die Platte hängen die Entscheidungen besonders eng zusammen — Dirty-State, Auslösezeitpunkt und Konfliktverhalten lassen sich nicht sinnvoll einzeln bauen.
Skills pro Session:
/grillingund/domain-modeling;/researchfür AFK-Recherche.Rahmenentscheidungen aus dem Charting:
Vorarbeit: Ein Council zu diesem Vorhaben hat drei Punkte geliefert, die sonst untergegangen wären: das Dirty-Flag als Voraussetzung für alles Weitere, das Schreiben über
renamestatt direkt, und die Zeitstempel-Frage, die mit darüber entscheidet, ob der ausgeschlossene Filewatcher später Pflicht wird.Decisions so far
trash 5.2.6, Aufruftrash::delete(&pfad). Kostet +6 Pakete unter Windows und lässt sich nicht per Feature drücken (anders als beirfd); fünf davon sind eine zweite, semver-inkompatible Kopie derwindows-Familie. Auf Netzlaufwerken funktioniert die Crate gar nicht — Pfad-Bugtrash-rs#55, offen seit 2022, die Datei bleibt unversehrt liegen. Ohne den Bug würde Windows dort still und endgültig löschen undOk(())melden: am Rückgabewert ist der Fall nicht erkennbar, erkennbar wäre er nur über einenIFileOperationProgressSink, den die Crate hart alsNoneübergibt. Daraus folgt zwingend eine Rückfrage vor dem Löschen. Blockierend, aber schnell (512 MiB in 27 ms; nur der erste Aufruf kostet 740 ms COM-Initialisierung). Ungemessen blieben USB-Sticks und der pro Volume abschaltbare Papierkorb auf lokalem NTFS. Langfassung: Branchresearch/papierkorb.fs::writehat sie da schon vernichtet. Teuer wird Historie nicht durch das Wie des Schreibens, sondern durch das Wo: Gibt es genau eine Funktion, die eine Notiz schreibt, ist Historie später eine Änderung innerhalb dieser Funktion. Das ist die einzige Anforderung an #19 und kostet heute nichts, weil es noch gar keine Schreibstelle gibt. Die Asymmetrie läuft umgekehrt zur Behauptung: Der Append-Log ist die Einbahnstraße, nicht das schlichte Schreiben — die Automerge-Maintainer schreiben selbst, Historie lasse sich „nicht verwerfen, ohne das Dokument zu ersetzen", und ein ungepruntes Log misst im Yjs-Benchmark das 70-fache des Rohtexts. Langfassung: Branchresearch/historie.Not yet specified
Out of scope
Übergabe — Arbeitsstand für eine neue Sitzung
Diese Map ist noch nicht implementierungsbereit. Sechs Entscheidungen stehen aus; erst danach lässt sich das Notiz-Handling am Stück bauen.
Wo es steht
mainEinstieg: #17 (Dirty-State). Daran hängt #18 unmittelbar, und ohne den Zustand lässt sich „vor dem Wechsel fragen" nicht einmal formulieren.
Was eine neue Sitzung zuerst lesen sollte
docs/agents/issue-tracker.md—tea-Kommandos für diesen Tracker, inklusive der beiden Fallstricke (Assignees nur per PATCH, Dependencies brauchenowner/repoim Body) und des Branch-/PR-Workflows.CONTEXT.md— Glossar: Workspace, Marker, Workspace-Liste, Notiz, Selector, Editor.docs/research/— die Langfassungen mit Quellen (kommen mit PR #25 aufmain).Zwei Dinge, die überraschen würden
Der Git-Fetch gegen diese Instanz ist kaputt.
git pushfunktioniert,git fetch/clonebricht mitbad pack headerab — serverseitig wird einpackfileangekündigt, dann kommen nur leere Keepalives. Betroffen sind alle Repos der Instanz, nicht nur dieses; SSH und HTTPS gleichermaßen. Das Gitea-Log meldet dabei keinen Fehler, sondernConnection reset by peervon der Client-Seite — der Verdacht liegt deshalb auf der Netzstrecke (Firewall/DPI im Firmennetz), nicht auf dem Server. Ungeprüft: derselbe Klon-Versuch aus einem anderen Netz, etwa einem Handy-Hotspot. Wer das Repo auf einem neuen Gerät klonen will, sollte damit anfangen.dxerzeugtassets/tailwind.cssbei jedem vollen Build neu, obwohl Tailwind entfernt wurde und die Datei niemand verlinkt. Sie steht in der.gitignore; nicht wundern, nicht wieder einchecken.Offene Nebenbaustellen
main). Danach sind die lokalen Branchesresearch/papierkorbundresearch/historieentbehrlich.prototype/selector-uiist gepusht und bleibt als Primärquelle zu #8 bestehen.