feat(tools): pull-doc holt ein Server-Dokument in ein git-Worktree und committet es datiert (D88)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
22769cf3b6
commit
887b5c75ee
@@ -19,6 +19,7 @@ reverse.
|
||||
|
||||
## 2026-08-27
|
||||
|
||||
- A `pull-doc` script fetches a shared document from the backend and commits it into a git worktree — dated commits, none when nothing changed, so a cron gives the plan a git history
|
||||
- A benefit rating per node recorded as planned: a 0-9 digit inside the size token (`M/9`), and a third path mode that picks alternatives by benefit over cost — spelled out in SPEC §11 before it is built
|
||||
- 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
|
||||
|
||||
@@ -7525,3 +7525,53 @@ anna-Pillen petrol, Text byte-identisch. Bens Linse hält annas Backend
|
||||
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`.
|
||||
|
||||
## D88 — pull-doc: ein Server-Dokument in ein git-Worktree holen und committen
|
||||
Gewünscht: ein Script im `tools`-Verzeichnis, das eine Backend-URL und einen
|
||||
Zielpfad nimmt (der Zielpfad muss in einem git-Worktree liegen), das Dokument
|
||||
herunterlädt und mit einem Datums-Kommentar committet. Das ist die dritte
|
||||
Alternative unter „Git as the shared store" (`#col.git.pull`): zwischen der
|
||||
Datei im Repo (`#col.git.pr`) und dem Backend, das jede Änderung committet
|
||||
(`#col.git.auto`), steht der Cron-fähige Archiv-Schritt — ein geteilter Plan
|
||||
(D76) bekommt so eine Git-Historie, ohne dass der Server git können muss.
|
||||
|
||||
**Eigenes Script `tools/pull-doc`, nicht hinter `remote`.** `remote` ist die
|
||||
Vordertür für alles, was **auf dem Server** passiert (D77/CLAUDE.md); dieses
|
||||
Werkzeug läuft lokal — es holt per HTTP und committet ins lokale Worktree.
|
||||
|
||||
**Auch der Editor-Link wird genommen.** Was ein Mensch in der Hand hat, ist
|
||||
meist der geteilte `?live=`-Link, nicht die API-Adresse — der Parameter wird
|
||||
erkannt und prozent-dekodiert ausgepackt (dieselbe Höflichkeit wie bei den
|
||||
Pad-Adressen in D31: die URL aus der Adresszeile genügt).
|
||||
|
||||
**Unverändert heißt: kein Commit, Exit 0.** Ohne diese Regel füllte ein Cron
|
||||
die Historie mit leeren Bewegungen bzw. bräche bei `--allow-empty`-losem
|
||||
`git commit` fehl. Verglichen wird gegen die Datei auf der Platte.
|
||||
|
||||
**Byte-getreu geschrieben, von Python, nicht über eine Shell-Variable.** Eine
|
||||
Kommandosubstitution verschluckt abschließende Zeilenumbrüche — der Inhalt
|
||||
liefe also durch die Shell nicht unverfälscht. Das JSON liest und schreibt
|
||||
deshalb ein `python3`-Einzeiler (Datei direkt, `newline=""`); die Wahl fiel
|
||||
auf python3 statt jq/node, weil es der eine Interpreter ist, der auf
|
||||
Entwickler-Rechnern wie auf dem Zielserver (D76-Nachtrag 1) sicher vorliegt.
|
||||
Nachgemessen: 29 Bytes ohne angehängtes Newline kommen als 29 Bytes an.
|
||||
|
||||
**Committet wird mit Pfadangabe** (`git commit -m … -- <datei>`): Andere
|
||||
vorgemerkte Änderungen im Worktree bleiben unangetastet — nachgemessen mit
|
||||
einer gestagten Fremd-Datei, die nach dem Lauf weiterhin gestagt und nicht im
|
||||
Commit war. Die Nachricht nennt Datum, Titel und Server-Version
|
||||
(`Werkbaum-Stand vom 2026-08-27 11:53 — „Titel" (Version 8)`).
|
||||
|
||||
**Fehler sind laut und räumen auf:** kein Worktree, Verzeichnis fehlt,
|
||||
Abruf gescheitert, Antwort kein Dokument — je eigene Meldung, Exit ≠ 0,
|
||||
Temp-Datei weg (Trap). Die Worktree-Prüfung lehnt auch das `.git`-Verzeichnis
|
||||
selbst ab.
|
||||
|
||||
**Nachgemessen** gegen einen lokalen Mock-Server in einem
|
||||
Wegwerf-Worktree: Erstabruf committet genau die eine Datei; unveränderter
|
||||
zweiter Lauf meldet „kein Commit" (Exit 0, Commit-Zahl unverändert);
|
||||
geänderter Inhalt ergibt den zweiten Commit; der prozent-kodierte
|
||||
`?live=`-Link wird ausgepackt; Nicht-Worktree, 404 und Nicht-Dokument-JSON
|
||||
enden mit klarer Meldung und ohne Rückstände. Der echte Backend-Abruf ist
|
||||
derselbe GET wie im Mock — dieselbe Werkzeuggrenze wie überall: Der native
|
||||
Serverbetrieb ist über D76/D77 abgedeckt.
|
||||
|
||||
@@ -140,8 +140,9 @@
|
||||
" same instant is the expensive one.
|
||||
- [^] #col.point: A shared pointer: !!! focuses a node for everyone (XS)
|
||||
- [-] #col.pad: Borrow an Etherpad — it merges, we render (L) %% built, then removed, see D78
|
||||
- [ ] #col.git: Git as the shared store (L)
|
||||
- [~] #col.git: Git as the shared store (L)
|
||||
| [ ] #col.git.pr: A file in a repository, changed by pull request (S) %% works today, no code
|
||||
| [x] #col.git.pull: A script pulls the server document and commits it (S) %% tools/pull-doc, dated commits — see D88
|
||||
| [?] #col.git.auto: The backend commits every change (L) :#be.scaffold
|
||||
- [?] #col.git.hist: History and restore (M)
|
||||
- [?] #col.git.diff: Diff between two versions (S)
|
||||
@@ -886,6 +887,11 @@
|
||||
go through a pull request, a link renders it. For a plan that changes weekly
|
||||
rather than per second this is often the better answer.
|
||||
|
||||
#col.git.pull
|
||||
The tools/pull-doc script fetches a server document (a ?live= link works too)
|
||||
and commits it into a git worktree — date, title and version in the message,
|
||||
no commit when nothing changed. Run from cron, a shared plan archives itself.
|
||||
|
||||
#col.git.auto
|
||||
The server turns every change into a commit. History, restore and branches
|
||||
follow from that, with commit granularity as the open question.
|
||||
|
||||
Reference in New Issue
Block a user