strom-research 1.19.0-beta.6 → 1.19.0-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.cs.md CHANGED
@@ -7,7 +7,7 @@ Změny každé verze ve zkratce. Úplné poznámky a instalační řádky jsou n
7
7
 
8
8
  ## 1.19.0
9
9
 
10
- *Připravuje se: bety do 1.19.0-beta.6. Oddíl bude úplný s vydáním.*
10
+ *Připravuje se: bety do 1.19.0-beta.8. Oddíl bude úplný s vydáním.*
11
11
 
12
12
  - **Na archiv, který zmlkl, se čeká, místo opakovaných dotazů.** Když archiv přestane odpovídat, strom ho nechá na
13
13
  pokoji hodinu — a když týž den mlčí dál, dvě a pak čtyři hodiny — a agent se dozví, do kdy: mezitím dělá
@@ -16,7 +16,8 @@ Změny každé verze ve zkratce. Úplné poznámky a instalační řádky jsou n
16
16
  - **První úklid staršího výzkumu se jednou nabídne.** Výzkum, u kterého se nastřádalo hodně dat dřív, než si v tom
17
17
  strom začal sám dělat pořádek (záznamy práce, náhledy snímků a podobně), dostane v menu jednu nabídku: co by se
18
18
  smazalo, kolik a proč — bez souhlasu nic. Po souhlasu se v tom pak udržuje pořádek samo; po odmítnutí menu a
19
- nastavení dál říkají, co jde uvolnit.
19
+ nastavení dál říkají, co jde uvolnit. `strom pack`, odebrání rodokmenu i menu uvádějí velikost balíku, zálohy nebo
20
+ snímků jako všude jinde (1,5 MB, u malých 24 kB), nikdy „0.0 MB“.
20
21
  - **Digitální knihovny napoprvé správně.** U Krameria Národní knihovny ČR a Moravské zemské knihovny a u ANNO
21
22
  Rakouské národní knihovny dostane agent jejich vlastní vyhledávací adresy — méně neúspěšných dotazů a hádání.
22
23
  - **Ostřejší část snímku se opravdu čte.** Když z archivu přišla část snímku v lepším rozlišení, agent i jeho čtenáři
@@ -25,13 +26,16 @@ Změny každé verze ve zkratce. Úplné poznámky a instalační řádky jsou n
25
26
  - **Dokument se přečte spolehlivěji.** Čtenář zapisuje čtení do své zprávy průběžně, a čtení dvou čtenářů, kde četl
26
27
  jen jeden, to tak řekne — nikdy, že se shodují.
27
28
  - **Propojení s telefonem čeká na výzkum, neříká se jako chyba.** Než se po spuštění počítače spustí výzkum, `strom
28
- phone` i nastavení řeknou, že propojení je zapnuté a jeho server se znovu spustí se spuštěním výzkumu.
29
+ phone` i nastavení řeknou, že propojení je zapnuté a jeho server se znovu spustí se spuštěním výzkumu. Na iPhonu
30
+ zůstane list fotek při psaní osoby nebo poznámky nad klávesnicí a nabízené osoby na očích; server telefonu se spustí
31
+ jednou, i když ho spouští několik naráz.
29
32
  - **Opravy vlastních chyb stromu k rozhodnutí.** Když strom zjistí, že některá jeho dřívější verze ve výzkumu něco
30
33
  udělala špatně, `strom fixes` a Nastavení → Údržba → Opravy řeknou, o co jde, co se našlo a co by napravení udělalo,
31
34
  i jak je náročné; bez souhlasu se nestane nic a odmítnutí platí. První: slepá čtení ze zmenšeného snímku tam, kde
32
35
  byla ostřejší část — přečtou se znovu vedle starých, nejdřív na několika, nic se nepřepíše, rozdíl se stane úkolem.
33
- Čtení se porovnají podle přečteného — jmen, dat a čísel přepisu, ne slov komentáře čtenáře — a úkol jednou větou
34
- řekne, který údaj se liší. Druhá: po změně modelu nebo agenta pro čtení dřívější čtení, která stojí za nové přečtení
36
+ Čtení se porovnají podle přečteného — jmen, dat a čísel přepisu, ne slov komentáře čtenáře (i v němčině, kde má
37
+ velké písmeno každé podstatné jméno) — a úkol jednou větou řekne, který údaj se liší; kde jméno může jen začínat
38
+ větu, čtení se za shodná nevydávají. Když není co číst znovu, `strom fixes run` to řekne. Druhá: po změně modelu nebo agenta pro čtení dřívější čtení, která stojí za nové přečtení
35
39
  — s otevřenými místy, s neshodou čtenářů, s otevřeným rozporem, nepotvrzená u pramene; řečeno jako „četl model X,
36
40
  teď se čte modelem Y“, nabídnuto jednou na agenta a model, každé se přečte znovu tak, jak se četlo (snímky jednoho
37
41
  čtení spolu, zkouška i část vždy z celých čtení). Počítá se v čteních s jejich místy a náročnost ve voláních
@@ -40,6 +44,21 @@ Změny každé verze ve zkratce. Úplné poznámky a instalační řádky jsou n
40
44
  agent nebo model (`strom fixes run <id> --agent <a> --model <m>`), s tím, kdo četl dřív; ten, kdo tu číst nemůže, se
41
45
  odmítne hned i s těmi, kdo mohou. Čas napravení se zaokrouhluje nahoru a po zkoušce se přepočítá podle čtení, jak
42
46
  běžela souběžně.
47
+ - **Rodokmen, do kterého strom nesmí zapisovat, řekne proč.** strom zapíše do složky výzkumu pravidla pro Codex:
48
+ příkaz strom spuštěný samotný jde mimo sandbox Codexu — i na Windows, kde sandbox držel historii výzkumu zavřenou
49
+ a nic jiného nepustil — a co rozhoduje člověk a samotný git zůstává zakázané. Když zápisu do složky rodokmenu
50
+ sandbox agenta přesto brání, strom to řekne a agentovi poradí, co dělat podle toho, jak běží — spouštět strom
51
+ samotný, spustit Codex ve složce výzkumu, které důvěřuje, nebo nechat příkaz schválit mimo sandbox — místo holého
52
+ „chybí oprávnění“, které agent převyprávěl jako „nemám přístup k rodokmenu“. Kde agent nenechá žádnou svou značku,
53
+ pozná ho strom podle vlastní značky u agentů, které spouští, nebo podle programů, které ho spustily, a jako
54
+ pravděpodobnou příčinu jmenuje jeho sandbox, potom OneDrive nebo řízený přístup ke složkám ve Windows. Odmítnutý
55
+ zápis do historie se už nehlásí jako chybějící oprávnění k samotnému gitu a záloha nebo aktualizace, kterou nešlo
56
+ zapsat, žádá složku, do které lze zapisovat, a už neradí uvolnit místo na disku. `strom doctor` a `strom check`
57
+ zápis do výzkumu zkusí a řeknou, když nejde, i tam, kde složku nejde ani vypsat. Na disku bez pevných odkazů
58
+ (síťové úložiště, disk přesměrovaný přes Vzdálenou plochu) strom zase zapisuje, zámek jde jinou cestou, a zámek,
59
+ který pomalý disk ještě neukáže, už se po chvilce nepřebírá; rodokmen, který tam nejde založit, po sobě nic nenechá
60
+ a řekne to v jazyce výzkumu. Po instalaci přes npm na Windows spustí strom příkaz `strom.cmd` i tam, kde PowerShell
61
+ skripty odmítá.
43
62
 
44
63
  ## 1.18.0
45
64
 
@@ -99,7 +118,8 @@ Změny každé verze ve zkratce. Úplné poznámky a instalační řádky jsou n
99
118
  poznámky: výzkum si nechá svůj text. Místo nebo jiný údaj delší než řádek souboru GEDCOM (255 bajtů) už nezastaví
100
119
  jeho zápis a žádné emoji se nerozdělí tam, kde dlouhý řádek pokračuje. S `excerpts.for all` dostane v aplikaci Strom
101
120
  výřez i pramen, který zatím nikdo necituje, pokud se vedle citovaných vejde do limitu – citované se kvůli němu
102
- nezmenší; co se nevešlo, se řekne.
121
+ nezmenší; co se nevešlo, se řekne. Aplikace Strom se dozví, které obrazy pramene výzkum má, ale soubor je vynechal,
122
+ a na vyžádání si je z výzkumu načte — pramen po prameni, nebo všechny najednou i s tím, kolik jich je a jak asi velké.
103
123
 
104
124
  ## 1.17.0
105
125
 
package/CHANGELOG.de.md CHANGED
@@ -7,7 +7,7 @@ Die Änderungen jeder Version in Kürze. Die vollständigen Hinweise und die Ins
7
7
 
8
8
  ## 1.19.0
9
9
 
10
- *In Vorbereitung: die Betas bis 1.19.0-beta.6. Der Abschnitt ist mit dem Release vollständig.*
10
+ *In Vorbereitung: die Betas bis 1.19.0-beta.8. Der Abschnitt ist mit dem Release vollständig.*
11
11
 
12
12
  - **Auf ein verstummtes Archiv wird gewartet, statt es immer wieder zu fragen.** Antwortet ein Archiv nicht mehr,
13
13
  lässt strom es eine Stunde in Ruhe — zwei, dann vier, wenn es am selben Tag still bleibt — und der Agent erfährt, bis
@@ -16,8 +16,10 @@ Die Änderungen jeder Version in Kürze. Die vollständigen Hinweise und die Ins
16
16
  immer wieder angefragt.
17
17
  - **Das erste Aufräumen einer älteren Forschung wird einmal angeboten.** Eine Forschung, neben der sich viel
18
18
  angesammelt hat, bevor strom dort selbst Ordnung hielt (Protokolle der Arbeitssitzungen, Ansichten von Scans und
19
- Ähnliches), bekommt im Menü ein Angebot: was ginge, wie viel und warum — ohne Ja geht nichts. Nach einem Ja wird dort
20
- von selbst Ordnung gehalten; nach einem Nein sagen Menü und Einstellungen weiter, was sich freigeben lässt.
19
+ Ähnliches), bekommt im Menü ein Angebot: was ginge, wie viel und warum — ohne Ja geht nichts. Nach einem Ja wird
20
+ dort von selbst Ordnung gehalten; nach einem Nein sagen Menü und Einstellungen weiter, was sich freigeben lässt.
21
+ `strom pack`, das Entfernen eines Stammbaums und das Menü nennen die Größe eines Pakets, einer Sicherung oder der
22
+ Bilder wie überall sonst (1,5 MB, bei kleinen 24 kB), nie „0.0 MB“.
21
23
  - **Digitale Bibliotheken beim ersten Versuch richtig durchsucht.** Für Kramerius der Tschechischen
22
24
  Nationalbibliothek und der Mährischen Landesbibliothek und für ANNO der Österreichischen Nationalbibliothek bekommt
23
25
  der Agent die eigenen Suchadressen der Bibliotheken — weniger fehlgeschlagene Anfragen und weniger Raten.
@@ -29,14 +31,18 @@ Die Änderungen jeder Version in Kürze. Die vollständigen Hinweise und die Ins
29
31
  Lesung zweier Leser, bei der nur einer las, sagt das so — nie, dass sie übereinstimmen.
30
32
  - **Die Verbindung mit dem Telefon wartet auf die Forschung, nicht als Fehler genannt.** Bevor die Forschung nach dem
31
33
  Neustart des Computers startet, sagen `strom phone` und die Einstellungen, dass die Verbindung an ist und ihr Server
32
- mit der Forschung wieder startet.
34
+ mit der Forschung wieder startet. Auf einem iPhone bleibt das Blatt der Fotos beim Tippen einer Person oder Notiz über
35
+ der Tastatur, die angebotenen Personen im Blick; der Server des Telefons startet einmal, auch wenn ihn mehrere
36
+ zugleich starten.
33
37
  - **Korrekturen eigener Fehler von strom zur Entscheidung.** Findet strom, dass eine frühere Version von ihm in einer
34
38
  Forschung etwas falsch gemacht hat, sagen `strom fixes` und Einstellungen → Wartung → Korrekturen, worum es geht,
35
39
  was gefunden wurde und was eine Behebung täte, auch wie aufwendig sie ist; ohne Ja geschieht nichts, ein Nein
36
40
  bleibt. Die erste: blinde Lesungen aus dem verkleinerten Scan, wo es einen schärferen Teil gab — neben den alten
37
41
  noch einmal gelesen, zuerst an einigen, nichts überschrieben, ein Unterschied wird zur Aufgabe. Verglichen wird, was
38
- gelesen wurde — die Namen, Daten und Zahlen der Abschrift, nicht die Worte des Kommentars —, und die Aufgabe sagt in
39
- einem Satz, welche Angabe abweicht. Die zweite: nach einem Wechsel des Lesemodells oder Agenten die früheren
42
+ gelesen wurde — die Namen, Daten und Zahlen der Abschrift, nicht die Worte des Kommentars (auch auf Deutsch, wo
43
+ jedes Substantiv groß geschrieben wird) —, und die Aufgabe sagt in einem Satz, welche Angabe abweicht; wo ein Name
44
+ nur einen Satz beginnen kann, gelten die Lesungen nicht als gleich. Gibt es nichts neu zu lesen, sagt `strom fixes
45
+ run` das. Die zweite: nach einem Wechsel des Lesemodells oder Agenten die früheren
40
46
  Lesungen, die ein neues Lesen lohnen — mit offenen Stellen, uneinigen Lesern, einem offenen Widerspruch, an der
41
47
  Quelle nicht bestätigt; gesagt als „gelesen von Modell X, jetzt liest Modell Y“, einmal je Agent und Modell gefragt,
42
48
  jede so neu gelesen, wie sie gelesen wurde (die Bilder einer Lesung zusammen, ein Versuch oder ein Teil immer aus
@@ -46,6 +52,24 @@ Die Änderungen jeder Version in Kürze. Die vollständigen Hinweise und die Ins
46
52
  bereiter Agent oder ein anderes Modell (`strom fixes run <id> --agent <a> --model <m>`), mit dem, der vorher las;
47
53
  einer, der hier nicht lesen kann, wird sofort abgelehnt, mit denen, die es können. Die Zeit einer Behebung wird
48
54
  aufgerundet und nach dem Versuch nach den nebeneinander gelaufenen Lesungen neu gemessen.
55
+ - **Ein Stammbaum, in den strom nicht schreiben darf, sagt warum.** strom schreibt Regeln für Codex in den Ordner der
56
+ Forschung: ein allein ausgeführter strom-Befehl läuft außerhalb der Sandbox von Codex — auch unter Windows, wo die
57
+ Sandbox den Verlauf der Forschung verschlossen hielt und nichts anderes zuließ —, während das, was der Mensch
58
+ entscheidet, und git selbst verboten bleiben. Hindert die Sandbox eines Agenten strom trotzdem am Schreiben in den
59
+ Ordner des Stammbaums, sagt strom das und sagt dem Agenten, was zu tun ist, je nachdem, wie er läuft — strom allein
60
+ ausführen, Codex im Ordner der Forschung starten, dem er vertraut, oder den Befehl außerhalb der Sandbox genehmigen
61
+ lassen — statt eines bloßen „keine Berechtigung“, das der Agent als fehlenden Zugriff auf den Stammbaum wiedergab.
62
+ Wo ein Agent kein eigenes Merkmal hinterlässt, erkennt strom ihn an seinem eigenen Merkmal bei den Agenten, die es
63
+ startet, oder an den Programmen, die es gestartet haben, und nennt seine Sandbox als wahrscheinliche Ursache, danach
64
+ OneDrive oder den überwachten Ordnerzugriff von Windows. Ein vom Verlauf verweigertes Schreiben gilt nicht mehr als
65
+ fehlende Berechtigung für git selbst, und eine Sicherung oder ein Update, die nicht geschrieben werden konnten,
66
+ verlangen einen Ordner, in den geschrieben werden darf, statt Platz auf dem Datenträger freizumachen. `strom doctor`
67
+ und `strom check` versuchen, in die Forschung zu schreiben, und sagen, wenn es nicht geht, auch dort, wo sich der
68
+ Ordner nicht einmal auflisten lässt. Auf einem Laufwerk ohne feste Verknüpfungen (eine Netzwerkfreigabe, ein über
69
+ Remotedesktop umgeleitetes Laufwerk) schreibt strom wieder, seine Sperre geht einen anderen Weg, und eine Sperre, die
70
+ ein langsames Laufwerk noch nicht zeigt, wird nicht mehr nach einem Augenblick übernommen; ein Stammbaum, der sich
71
+ dort nicht anlegen lässt, hinterlässt nichts und sagt es in der Sprache der Forschung. Mit npm unter Windows
72
+ installiert, startet `strom.cmd` strom auch dort, wo PowerShell Skripte verweigert.
49
73
 
50
74
  ## 1.18.0
51
75
 
@@ -117,7 +141,9 @@ Die Änderungen jeder Version in Kürze. Die vollständigen Hinweise und die Ins
117
141
  GEDCOM-Datei (255 Bytes), hält das Schreiben der Datei nicht mehr auf, und kein Emoji wird dort geteilt, wo eine
118
142
  lange Zeile weitergeht. Mit `excerpts.for all` bekommt auch eine Quelle, die noch niemand zitiert, in der Strom-App
119
143
  ihren Ausschnitt, soweit er neben den zitierten unter die Grenze passt – die zitierten werden dafür nie kleiner; was
120
- nicht passte, wird gesagt.
144
+ nicht passte, wird gesagt. Die Strom-App erfährt, welche Bilder einer Quelle die Forschung hat, ihre Datei aber
145
+ wegließ, und lädt sie bei Bedarf aus der Forschung — Quelle für Quelle oder alle auf einmal, mit Anzahl und etwa
146
+ ihrer Größe.
121
147
 
122
148
  ## 1.17.0
123
149
 
package/CHANGELOG.md CHANGED
@@ -7,16 +7,17 @@ The changes of each version in short. The full notes and the install lines are o
7
7
 
8
8
  ## 1.19.0
9
9
 
10
- *In preparation: the betas up to 1.19.0-beta.6. The section is complete with the release.*
10
+ *In preparation: the betas up to 1.19.0-beta.8. The section is complete with the release.*
11
11
 
12
12
  - **An archive that went silent is waited for, not asked again and again.** When an archive stops answering, strom
13
13
  leaves it alone for an hour — two, then four when it stays silent the same day — and the agent hears until when:
14
14
  it goes on with other work, lets a download in the background wait for the archive (up to 30 minutes) and go on by
15
15
  itself, or closes the session to go on later. No more asking the archive over and over meanwhile.
16
- - **The first tidy of an older research is offered once.** A research that gathered much beside it before strom
17
- kept order there by itself (logs of work sessions, views of scans and the like) gets one offer in the menu: what
18
- would go, how much and why, and nothing goes without a yes. After a yes it is kept in order by itself; after a no,
19
- the menu and the settings keep saying what can be freed.
16
+ - **The first tidy of an older research is offered once.** A research that gathered much beside it before strom kept
17
+ order there by itself (logs of work sessions, views of scans and the like) gets one offer in the menu: what would
18
+ go, how much and why, and nothing goes without a yes. After a yes it is kept in order by itself; after a no, the
19
+ menu and the settings keep saying what can be freed. `strom pack`, removing a family tree and the menu say how big a
20
+ package, a backup or the images are as everywhere else (1,5 MB in Czech, 24 kB for a small one), never "0.0 MB".
20
21
  - **Digital libraries searched right at the first try.** For Kramerius of the Czech National Library and of the
21
22
  Moravian Library and for ANNO of the Austrian National Library, the agent gets the libraries' own search
22
23
  addresses — fewer failed requests and less guessing.
@@ -28,13 +29,16 @@ The changes of each version in short. The full notes and the install lines are o
28
29
  only one read says so, never that they agree.
29
30
  - **The phone connection waits for the research, not said as an error.** Before the research starts after the computer
30
31
  started again, `strom phone` and the settings say the connection is on and its server starts again with the research.
32
+ On an iPhone the sheet of photos stays above the keyboard while a person or a note is typed, the persons offered in
33
+ sight; the phone's server starts once, also when several start it at the same moment.
31
34
  - **Fixes of strom's own mistakes, offered to decide.** When strom finds that an earlier version of its own did
32
35
  something wrong in a research, `strom fixes` and Settings → Maintenance → Fixes say what it is about, what was found
33
36
  and what a remedy would do, with how demanding it is; nothing happens without a yes, and a no is kept. The first:
34
37
  blind readings made from the reduced scan where a sharper part existed — read again beside the old ones, first on a
35
38
  few, nothing overwritten, a difference becomes a task. Held against each other by what was read — the names, dates
36
- and numbers of the transcript, not the words of the reader's comment — the task says in one sentence which of them
37
- differs. The second: after the reading model or agent changed, the earlier readings worth reading again — with open
39
+ and numbers of the transcript, not the words of the reader's comment (in German too, where every noun has a
40
+ capital) — the task says in one sentence which of them differs; where a name may only begin a sentence, the readings
41
+ are not said to agree. With nothing to read again, `strom fixes run` says so. The second: after the reading model or agent changed, the earlier readings worth reading again — with open
38
42
  places, readers who disagreed, an open conflict, a reading not confirmed at the source; said as "read by model X,
39
43
  now read by model Y", asked once per agent and model, each read again as it was read (the images of one reading
40
44
  together, a trial or a part always of whole readings). Counted in readings with their places and what a remedy takes
@@ -43,6 +47,21 @@ The changes of each version in short. The full notes and the install lines are o
43
47
  ordering them. The remedy may be read by another agent or model ready here (`strom fixes run <id> --agent <a>
44
48
  --model <m>`), with which one read before said; one that cannot read here is refused at once, with those that can.
45
49
  The time of a remedy is rounded up and, after the trial, measured again by the readings as they ran side by side.
50
+ - **A family tree strom may not write into says why.** strom writes Codex's rules into the research's folder: a strom
51
+ command run on its own goes outside Codex's sandbox — on Windows too, where the sandbox kept the research's history
52
+ closed and let nothing else run — while what the person decides and git itself stay forbidden. When an agent's
53
+ sandbox still keeps strom from writing into the family tree's folder, strom says so and tells the agent what to do as
54
+ it is there — run strom on its own, start Codex in the research's folder it trusts, or have the command approved
55
+ outside the sandbox — instead of a bare "no permission" the agent retold as no access to the family tree. Where an
56
+ agent leaves no mark of its own, strom knows it by its own mark on the agents it starts, or by the programs that
57
+ started it, and names its sandbox as the likely cause, then OneDrive or the controlled folder access of Windows. A
58
+ write the history refused is no longer said as missing rights to git itself, and a backup or an update that could not
59
+ be written asks for a folder with the right to write in it, no longer to free room on the disk. `strom doctor` and
60
+ `strom check` try writing into the research and say when it does not go, also where the folder cannot even be
61
+ listed. On a disk without hard links (a network share, a drive redirected over Remote Desktop) strom writes again,
62
+ its lock made another way, and a lock a slow disk does not show yet is no longer taken over after a moment; a family
63
+ tree that cannot be created there leaves nothing behind, said in the research language. Installed with npm on
64
+ Windows, `strom.cmd` runs strom where PowerShell refuses scripts.
46
65
 
47
66
  ## 1.18.0
48
67
 
@@ -108,7 +127,8 @@ The changes of each version in short. The full notes and the install lines are o
108
127
  value longer than a line of the GEDCOM file (255 bytes) no longer stops the file from being written, and no emoji is
109
128
  split where a long line goes on. With `excerpts.for all` a source nobody cites yet gets its excerpt in the Strom app
110
129
  too, wherever it fits under the limit beside the cited ones, which never get smaller for it; what did not fit is
111
- said.
130
+ said. The Strom app is told which images of a source the research has but its file left out, and loads them from
131
+ the research on demand — a source at a time, or all at once with how many and about how big.
112
132
 
113
133
  ## 1.17.0
114
134
 
package/README.md CHANGED
@@ -34,7 +34,10 @@ Nothing needs admin rights.
34
34
  - **macOS, Linux**:
35
35
  `curl -fsSL https://raw.githubusercontent.com/ACiDekCZ/strom-research/main/install/install.sh | sh`
36
36
 
37
- With Node 22.18 or newer: `npm install -g strom-research`.
37
+ With Node 22.18 or newer: `npm install -g strom-research`. On Windows the
38
+ installer above is the recommended way: installed with npm, PowerShell may
39
+ refuse `strom` ("running scripts is disabled on this system") — `strom.cmd`
40
+ runs it.
38
41
 
39
42
  The setup asks a few things — language, where to keep the research, which
40
43
  agent (it finds the installed ones and offers Claude if there is none), the
@@ -610,6 +610,20 @@
610
610
  "ui.doc.appurl.env.fix": "proměnnou STROM_APP_URL nastavit na adresu aplikace Strom ({web}, nebo její kopie na tomto počítači http://127.0.0.1:<port>/), nebo odebrat",
611
611
  "ui.doc.tree.ok": "{name}: data v pořádku a zapečetěná",
612
612
  "ui.doc.tree.bad": "{name}: {n, plural, one {# problém} few {# problémy} other {# problémů}}",
613
+ "ui.doc.write": "zápis do rodokmenu",
614
+ "ui.doc.write.ok": "do jeho .strom i .git lze zapisovat",
615
+ "ui.doc.write.sandbox": "{where}: zápis odepřen – strom běží pod agentem, nejspíš to zakazuje jeho sandbox",
616
+ "ui.doc.write.sandbox.fix": "spustit příkaz mimo sandbox agenta, nebo dát agentovi složku výzkumu jako zapisovatelnou",
617
+ "ui.doc.write.sandbox.fix.codex-strom": "spouštět strom samotný, bez roury a cd (pravidla .codex ve složce výzkumu ho pustí ze sandboxu Codexu; Codex je čte ve složce, které důvěřuje – znovu je zapíše strom agents sync), nebo schválit příkaz mimo sandbox Codexu (Codex se zeptá), nebo v nastavení zvolit úroveň „plná“ – volba jen člověka",
618
+ "ui.doc.write.sandbox.fix.codex": "spustit Codex ve složce výzkumu a důvěřovat jí (pravidla .codex v ní pustí strom ze sandboxu), nebo ho spustit přes strom („Pokračovat ve výzkumu s agentem“ v menu, nebo strom chat), nebo schválit příkaz mimo jeho sandbox",
619
+ "ui.doc.write.sandbox.fix.claude": "spustit Claude Code ve složce výzkumu (strom chat to tak dělá), nebo schválit příkaz mimo jeho sandbox",
620
+ "ui.doc.write.refused": "{where}: zápis odepřen – chybí právo zápisu",
621
+ "ui.doc.write.refused.fix": "složka, do které lze zapisovat",
622
+ "ui.doc.write.refused.fix.windows": "složka, do které lze zapisovat – zápisu může bránit i OneDrive nebo řízený přístup ke složkám v Zabezpečení Windows",
623
+ "ui.doc.write.refused.fix.agent": "strom spustil {agent}: nejspíš jeho sandbox – příkaz schválit mimo něj, nebo {agent} nechat pracovat na úrovni bez sandboxu; jinak složka, do které lze zapisovat",
624
+ "ui.doc.write.refused.fix.agent.windows": "strom spustil {agent}: nejspíš jeho sandbox – příkaz schválit mimo něj, nebo {agent} nechat pracovat na úrovni bez sandboxu; jinak složka, do které lze zapisovat – zápisu může bránit i OneDrive nebo řízený přístup ke složkám v Zabezpečení Windows",
625
+ "ui.doc.write.nolink": "{where}: disk neumí pevné odkazy – zámek jede náhradní cestou (pomalejší, když pracuje víc procesů naráz)",
626
+ "ui.doc.write.nolink.fix": "složka na vlastním disku tohoto počítače",
613
627
  "ui.doc.allok": "Všechno potřebné je na místě.",
614
628
  "ui.doc.problems": "{n, plural, one {# problém} few {# problémy} other {# problémů}} – co udělat, říkají šipky (strom setup nabídne instalaci toho, co chybí).",
615
629
  "ui.menu.fix": "Opravit to hned?",
@@ -1516,6 +1530,7 @@
1516
1530
  "ui.check.found": "{errors, plural, one {# chyba} few {# chyby} other {# chyb}}, {warnings} varování",
1517
1531
  "ui.check.unproven": "pozn.: osob, které nestojí na žádném vlastním záznamu: {n} → strom person list --unproven",
1518
1532
  "ui.check.counter": "počítadlo {prefix} zaostává za existujícími čísly (srovná se samo při příštím zápisu)",
1533
+ "ui.check.unwritable": "zápis sem je odepřen – proč, řekne strom doctor",
1519
1534
  "ui.export.file": "{file} ({for}) — {persons, plural, one {# osoba} few {# osoby} other {# osob}} · {families, plural, one {# rodina} few {# rodiny} other {# rodin}} · {facts, plural, one {# údaj} few {# údaje} other {# údajů}} · {sources, plural, one {# pramen} few {# prameny} other {# pramenů}}{skipped}",
1520
1535
  "ui.export.for.strom": "pro aplikaci Strom",
1521
1536
  "ui.export.for.strom.images": "pro aplikaci Strom, s obrázky",
@@ -2114,13 +2129,13 @@
2114
2129
  "ui.trees.pack": "zabalit „{name}“ a poslat někomu (soubor ZIP)",
2115
2130
  "ui.trees.unpack": "rodokmen, který někdo poslal (soubor ZIP)",
2116
2131
  "ui.pack.which": "Které snímky přibalit?",
2117
- "ui.pack.opt.records": "jen se zápisy – {mb} MB (prohledané stránky dá archiv znovu)",
2118
- "ui.pack.opt.all": "všechny – {mb} MB",
2119
- "ui.pack.done": "Zabaleno „{name}“: {file} ({mb} MB)",
2132
+ "ui.pack.opt.records": "jen se zápisy – {size} (prohledané stránky dá archiv znovu)",
2133
+ "ui.pack.opt.all": "všechny – {size}",
2134
+ "ui.pack.done": "Zabaleno „{name}“: {file} ({size})",
2120
2135
  "ui.pack.saved": " rodokmen, jak byl naposledy uložený, i s historií",
2121
- "ui.pack.images": " snímky: {n} ({mb} MB) – se zápisy a ostatní, které nikdo znovu nestáhne",
2122
- "ui.pack.images.all": " snímky: všech {n} ({mb} MB)",
2123
- "ui.pack.left": " vynechané snímky: {n} ({mb} MB) – prohledané stránky; až budou potřeba, strom je z archivu stáhne znovu",
2136
+ "ui.pack.images": " snímky: {n} ({size}) – se zápisy a ostatní, které nikdo znovu nestáhne",
2137
+ "ui.pack.images.all": " snímky: všech {n} ({size})",
2138
+ "ui.pack.left": " vynechané: {n, plural, one {# snímek} few {# snímky} other {# snímků}} ({size}) – prohledané stránky; až budou potřeba, strom je z archivu stáhne znovu",
2124
2139
  "ui.pack.connectors": " konektory: {list}",
2125
2140
  "ui.pack.noconnector": "⚠ některé vynechané snímky přišly konektorem, který na tomto počítači není – nikdo by je znovu nestáhl: strom pack --all-images",
2126
2141
  "ui.pack.missing": "⚠ snímky, které rodokmen uvádí, ale na tomto počítači nejsou: {n} – v balíčku chybí",
@@ -2151,14 +2166,14 @@
2151
2166
  "ui.remove.person": "rodokmen z počítače odebírá jen člověk u počítače",
2152
2167
  "ui.remove.busy": "na rodokmenu „{name}“ se právě pracuje – odebrat ho jde, až práce skončí",
2153
2168
  "ui.remove.what": "„{name}“ ({root}) · osoby: {persons}",
2154
- "ui.remove.backup": "Nejdřív ho zabalit jako zálohu, se všemi snímky ({mb} MB)? Kdykoli se vrátí přes strom unpack.",
2169
+ "ui.remove.backup": "Nejdřív ho zabalit jako zálohu, se všemi snímky ({size})? Kdykoli se vrátí přes strom unpack.",
2155
2170
  "ui.remove.backup.done": " záloha: {file}",
2156
- "ui.remove.images": "Poslat do koše i snímky, které žádný jiný rodokmen nepoužívá (snímky: {n}, {mb} MB)?",
2171
+ "ui.remove.images": "Poslat do koše i snímky, které žádný jiný rodokmen nepoužívá (snímky: {n}, {size})?",
2157
2172
  "ui.remove.type": "Pro potvrzení napsat název rodokmenu ({name}) – cokoli jiného nic neodebere:",
2158
2173
  "ui.remove.cancelled": "Nic se neodebralo.",
2159
2174
  "ui.remove.done": "„{name}“ je v koši.",
2160
2175
  "ui.remove.live": " aplikace Strom ho už živě nesleduje",
2161
- "ui.remove.images.done": " jeho snímky v koši: {n} ({mb} MB)",
2176
+ "ui.remove.images.done": " jeho snímky v koši: {n} ({size})",
2162
2177
  "ui.remove.images.folder": "{name} – snímky",
2163
2178
  "ui.remove.backup.back": " vrátí se ze zálohy: strom unpack „{file}“",
2164
2179
  "ui.remove.trash.alone": " vrátí se z koše systému, dokud se koš nevysype",
@@ -2194,10 +2209,24 @@
2194
2209
  "ui.error.pack.missing.hint": "zadat ZIP soubor, který přišel (přetáhnout ho do terminálu)",
2195
2210
  "ui.error.pack.no-manifest": "v {path} není {manifest}: není to výzkum zabalený stromem",
2196
2211
  "ui.error.pack.no-manifest.hint": "zadat ZIP soubor, který přišel",
2197
- "ui.error.fs.no-permission": "chybí oprávnění{where}",
2212
+ "ui.error.fs.no-permission": "chybí oprávnění: {where}",
2198
2213
  "ui.error.fs.no-permission.hint": "vybrat složku, do které lze zapisovat",
2199
2214
  "ui.error.fs.held": "soubor {file} drží jiný program (antivirus, synchronizace nebo záloha, editor)",
2200
2215
  "ui.error.fs.held.hint": "za chvíli spustit tentýž příkaz znovu – nic z něj se neuložilo",
2216
+ "ui.error.fs.no-permission.windows.hint": "vybrat složku, do které lze zapisovat – na Windows může zápisu bránit i OneDrive nebo řízený přístup ke složkám v Zabezpečení Windows",
2217
+ "ui.error.fs.no-permission.agent.hint": "strom spustil {agent} a zápis nejspíš zakazuje jeho sandbox: příkaz schválit mimo sandbox, nebo {agent} nechat pracovat na úrovni bez sandboxu; jinak vybrat složku, do které lze zapisovat",
2218
+ "ui.error.fs.no-permission.agent.windows.hint": "strom spustil {agent} a zápis nejspíš zakazuje jeho sandbox: příkaz schválit mimo sandbox, nebo {agent} nechat pracovat na úrovni bez sandboxu; jinak vybrat složku, do které lze zapisovat – na Windows může zápisu bránit i OneDrive nebo řízený přístup ke složkám v Zabezpečení Windows",
2219
+ "ui.error.fs.no-permission.unseen.hint": "strom nevidí programy, které ho spustily, jako v sandboxu agenta: když strom spustil agent, zápis nejspíš zakazuje jeho sandbox – příkaz schválit mimo sandbox; jinak vybrat složku, do které lze zapisovat",
2220
+ "ui.error.fs.no-permission.unseen.windows.hint": "strom nevidí programy, které ho spustily, jako v sandboxu agenta: když strom spustil agent, zápis nejspíš zakazuje jeho sandbox – příkaz schválit mimo sandbox; jinak vybrat složku, do které lze zapisovat – na Windows může zápisu bránit i OneDrive nebo řízený přístup ke složkám v Zabezpečení Windows",
2221
+ "ui.error.fs.sandboxed": "chybí oprávnění: {where} – strom běží pod agentem a nejspíš to zakazuje jeho sandbox",
2222
+ "ui.error.fs.sandboxed.hint": "spustit příkaz mimo sandbox agenta, nebo pracovat ve složce výzkumu (i s jejími .git a .strom zapisovatelnými)",
2223
+ "ui.error.git.unwritable": "git nemůže zapisovat do výzkumu: {where}",
2224
+ "ui.error.git.unwritable.hint": "vybrat složku, do které lze zapisovat",
2225
+ "ui.error.fs.folder": "místo souboru je zadaná složka: {path}",
2226
+ "ui.error.init.unwritable": "rodokmen nejde založit v {where}: zápis tam je odepřen – nic z něj tam nezůstalo",
2227
+ "ui.error.init.unwritable.hint": "vybrat složku, do které lze zapisovat",
2228
+ "ui.error.init.failed": "rodokmen nejde založit v {where}: {detail} – nic z něj tam nezůstalo",
2229
+ "ui.error.init.failed.hint": "složka na vlastním disku tohoto počítače (síťový nebo přesměrovaný disk může zápis nebo historii odmítnout)",
2201
2230
  "ui.task.none": "Žádné úkoly.",
2202
2231
  "ui.research.none": "Žádné linie výzkumu.",
2203
2232
  "ui.person.none": "Žádné osoby.",
@@ -2270,6 +2299,10 @@
2270
2299
  "ui.error.backup.failed.hint": "Uvolnit místo na disku ({where}) a spustit strom znovu – nebo se vrátit: strom update --channel {back}",
2271
2300
  "ui.error.backup.failed.update": "Zálohu před přechodem z {from} na {to} se nepodařilo vytvořit: {detail}. Nic se nenainstalovalo.",
2272
2301
  "ui.error.backup.failed.update.hint": "Uvolnit místo na disku ({where}) a znovu strom update --channel {channel}",
2302
+ "ui.error.backup.failed.refused.hint": "Zápis do {where} je odepřen: vybrat složku, do které lze zapisovat, pak spustit strom znovu – nebo se vrátit: strom update --channel {back}",
2303
+ "ui.error.backup.failed.other.hint": "Spustit strom znovu (víc řekne strom doctor) – nebo se vrátit: strom update --channel {back}",
2304
+ "ui.error.backup.failed.update.refused.hint": "Zápis do {where} je odepřen: vybrat složku, do které lze zapisovat, pak znovu strom update --channel {channel}",
2305
+ "ui.error.backup.failed.update.other.hint": "Znovu strom update --channel {channel} (víc řekne strom doctor)",
2273
2306
  "ui.error.folder.in-program": "{folder} leží ve složce programu strom {program} – aktualizace ji nahrazuje a odinstalace odstraňuje, výzkum by šel s ní. Nic se nezměnilo.",
2274
2307
  "ui.error.folder.in-program.hint": "Zvolit složku mimo ni, například {suggested}",
2275
2308
  "ui.error.folder.in-program.default.hint": "Zadat složku mimo ni: strom setup --home \"{suggested}\" --yes",
@@ -610,6 +610,20 @@
610
610
  "ui.doc.appurl.env.fix": "die Variable STROM_APP_URL auf eine Adresse der Strom-App setzen ({web}, oder eine Kopie auf diesem Computer http://127.0.0.1:<port>/) oder entfernen",
611
611
  "ui.doc.tree.ok": "{name}: Daten in Ordnung und versiegelt",
612
612
  "ui.doc.tree.bad": "{name}: {n, plural, one {# Problem} other {# Probleme}}",
613
+ "ui.doc.write": "Schreiben in diesen Stammbaum",
614
+ "ui.doc.write.ok": "in sein .strom und .git kann geschrieben werden",
615
+ "ui.doc.write.sandbox": "{where}: Schreiben verweigert – strom läuft unter einem Agenten, wahrscheinlich verbietet es dessen Sandbox",
616
+ "ui.doc.write.sandbox.fix": "den Befehl außerhalb der Sandbox des Agenten ausführen, oder dem Agenten den Ordner der Forschung als beschreibbar geben",
617
+ "ui.doc.write.sandbox.fix.codex-strom": "strom allein ausführen, ohne Pipe und cd (die Regeln in .codex im Ordner der Forschung lassen es aus der Sandbox von Codex; Codex liest sie in einem Ordner, dem es vertraut – strom agents sync schreibt sie neu), oder den Befehl außerhalb der Sandbox von Codex genehmigen (Codex fragt), oder in den Einstellungen die Stufe „voll“ wählen – allein die Wahl des Menschen",
618
+ "ui.doc.write.sandbox.fix.codex": "Codex im Ordner der Forschung starten und ihm vertrauen (die Regeln in .codex lassen strom aus der Sandbox), oder über strom starten („Die Forschung mit dem Agenten fortsetzen“ im Menü, oder strom chat), oder den Befehl außerhalb seiner Sandbox genehmigen",
619
+ "ui.doc.write.sandbox.fix.claude": "Claude Code im Ordner der Forschung starten (strom chat tut das), oder den Befehl außerhalb seiner Sandbox genehmigen",
620
+ "ui.doc.write.refused": "{where}: Schreiben verweigert – keine Schreibberechtigung",
621
+ "ui.doc.write.refused.fix": "ein Ordner, in den geschrieben werden darf",
622
+ "ui.doc.write.refused.fix.windows": "ein Ordner, in den geschrieben werden darf – auch OneDrive oder der überwachte Ordnerzugriff der Windows-Sicherheit kann das Schreiben verhindern",
623
+ "ui.doc.write.refused.fix.agent": "strom wurde von {agent} gestartet: vermutlich dessen Sandbox – den Befehl außerhalb genehmigen oder {agent} auf einer Stufe ohne Sandbox arbeiten lassen; sonst ein Ordner, in den geschrieben werden darf",
624
+ "ui.doc.write.refused.fix.agent.windows": "strom wurde von {agent} gestartet: vermutlich dessen Sandbox – den Befehl außerhalb genehmigen oder {agent} auf einer Stufe ohne Sandbox arbeiten lassen; sonst ein Ordner, in den geschrieben werden darf – auch OneDrive oder der überwachte Ordnerzugriff der Windows-Sicherheit kann das Schreiben verhindern",
625
+ "ui.doc.write.nolink": "{where}: das Laufwerk kann keine festen Verknüpfungen – die Sperre geht einen anderen Weg (langsamer, wenn mehrere zugleich arbeiten)",
626
+ "ui.doc.write.nolink.fix": "ein Ordner auf der eigenen Festplatte dieses Computers",
613
627
  "ui.doc.allok": "Alles Nötige ist vorhanden.",
614
628
  "ui.doc.problems": "{n, plural, one {# Problem} other {# Probleme}} – den Pfeilen folgen (strom setup bietet an, Fehlendes zu installieren).",
615
629
  "ui.menu.fix": "Jetzt beheben?",
@@ -1516,6 +1530,7 @@
1516
1530
  "ui.check.found": "{errors} Fehler, {warnings, plural, one {# Warnung} other {# Warnungen}}",
1517
1531
  "ui.check.unproven": "Hinweis: Personen, die sich auf keinen eigenen Eintrag stützen: {n} → strom person list --unproven",
1518
1532
  "ui.check.counter": "Zähler {prefix} liegt hinter den vorhandenen Nummern (gleicht sich beim nächsten Schreiben selbst aus)",
1533
+ "ui.check.unwritable": "Schreiben hierher verweigert – warum, sagt strom doctor",
1519
1534
  "ui.export.file": "{file} ({for}) — {persons, plural, one {# Person} other {# Personen}} · {families, plural, one {# Familie} other {# Familien}} · {facts, plural, one {# Angabe} other {# Angaben}} · {sources, plural, one {# Quelle} other {# Quellen}}{skipped}",
1520
1535
  "ui.export.for.strom": "für die Strom-App",
1521
1536
  "ui.export.for.strom.images": "für die Strom-App, mit Bildern",
@@ -2114,13 +2129,13 @@
2114
2129
  "ui.trees.pack": "„{name}“ einpacken und jemandem schicken (eine ZIP-Datei)",
2115
2130
  "ui.trees.unpack": "ein zugeschickter Stammbaum (eine ZIP-Datei)",
2116
2131
  "ui.pack.which": "Welche Bilder kommen mit?",
2117
- "ui.pack.opt.records": "die, auf denen die Einträge stehen – {mb} MB (die durchgesehenen Seiten gibt das Archiv wieder)",
2118
- "ui.pack.opt.all": "alle – {mb} MB",
2119
- "ui.pack.done": "„{name}“ eingepackt: {file} ({mb} MB)",
2132
+ "ui.pack.opt.records": "die, auf denen die Einträge stehen – {size} (die durchgesehenen Seiten gibt das Archiv wieder)",
2133
+ "ui.pack.opt.all": "alle – {size}",
2134
+ "ui.pack.done": "„{name}“ eingepackt: {file} ({size})",
2120
2135
  "ui.pack.saved": " der Stammbaum, wie er zuletzt gespeichert wurde, mit seiner Geschichte",
2121
- "ui.pack.images": " Bilder: {n} ({mb} MB) – die, auf denen die Einträge stehen, und die, die niemand wieder laden kann",
2122
- "ui.pack.images.all": " Bilder: alle {n} ({mb} MB)",
2123
- "ui.pack.left": " weggelassen: {n, plural, one {# Bild} other {# Bilder}} ({mb} MB) – durchgesehene Seiten; strom lädt sie aus dem Archiv wieder, wenn sie gebraucht werden",
2136
+ "ui.pack.images": " Bilder: {n} ({size}) – die, auf denen die Einträge stehen, und die, die niemand wieder laden kann",
2137
+ "ui.pack.images.all": " Bilder: alle {n} ({size})",
2138
+ "ui.pack.left": " weggelassen: {n, plural, one {# Bild} other {# Bilder}} ({size}) – durchgesehene Seiten; strom lädt sie aus dem Archiv wieder, wenn sie gebraucht werden",
2124
2139
  "ui.pack.connectors": " Konnektoren: {list}",
2125
2140
  "ui.pack.noconnector": "⚠ einige weggelassene Bilder kamen über einen Konnektor, der auf diesem Computer fehlt – niemand könnte sie wieder laden: strom pack --all-images",
2126
2141
  "ui.pack.missing": "⚠ {n, plural, one {# Bild, das der Stammbaum nennt, ist} other {# Bilder, die der Stammbaum nennt, sind}} nicht auf diesem Computer – nicht im Paket",
@@ -2151,14 +2166,14 @@
2151
2166
  "ui.remove.person": "einen Stammbaum nimmt nur die Person am Computer herunter",
2152
2167
  "ui.remove.busy": "an „{name}“ wird gerade gearbeitet – er kann weg, wenn die Arbeit vorbei ist",
2153
2168
  "ui.remove.what": "„{name}“ ({root}) · Personen: {persons}",
2154
- "ui.remove.backup": "Zuerst als Sicherung einpacken, mit allen Bildern ({mb} MB)? Er kommt jederzeit mit strom unpack zurück.",
2169
+ "ui.remove.backup": "Zuerst als Sicherung einpacken, mit allen Bildern ({size})? Er kommt jederzeit mit strom unpack zurück.",
2155
2170
  "ui.remove.backup.done": " Sicherung: {file}",
2156
- "ui.remove.images": "Auch die Bilder, die kein anderer Stammbaum nutzt, in den Papierkorb ({n}, {mb} MB)?",
2171
+ "ui.remove.images": "Auch die Bilder, die kein anderer Stammbaum nutzt, in den Papierkorb ({n}, {size})?",
2157
2172
  "ui.remove.type": "Zur Bestätigung den Namen des Stammbaums ({name}) tippen – alles andere nimmt nichts weg:",
2158
2173
  "ui.remove.cancelled": "Nichts wurde weggenommen.",
2159
2174
  "ui.remove.done": "„{name}“ ist im Papierkorb.",
2160
2175
  "ui.remove.live": " die Strom-App verfolgt ihn nicht mehr live",
2161
- "ui.remove.images.done": " seine Bilder im Papierkorb: {n} ({mb} MB)",
2176
+ "ui.remove.images.done": " seine Bilder im Papierkorb: {n} ({size})",
2162
2177
  "ui.remove.images.folder": "{name} – Bilder",
2163
2178
  "ui.remove.backup.back": " er kommt aus der Sicherung zurück: strom unpack „{file}“",
2164
2179
  "ui.remove.trash.alone": " er kommt aus dem Papierkorb des Systems zurück, bis er geleert wird",
@@ -2194,10 +2209,24 @@
2194
2209
  "ui.error.pack.missing.hint": "die ZIP-Datei angeben, die gekommen ist (ins Terminal ziehen)",
2195
2210
  "ui.error.pack.no-manifest": "keine {manifest} in {path}: keine von strom gepackte Forschung",
2196
2211
  "ui.error.pack.no-manifest.hint": "die ZIP-Datei angeben, die gekommen ist",
2197
- "ui.error.fs.no-permission": "keine Berechtigung{where}",
2212
+ "ui.error.fs.no-permission": "keine Berechtigung: {where}",
2198
2213
  "ui.error.fs.no-permission.hint": "einen Ordner wählen, in den geschrieben werden darf",
2199
2214
  "ui.error.fs.held": "ein anderes Programm hält {file} (Virenschutz, Synchronisation oder Sicherung, Editor)",
2200
2215
  "ui.error.fs.held.hint": "denselben Befehl gleich noch einmal ausführen – nichts davon wurde gespeichert",
2216
+ "ui.error.fs.no-permission.windows.hint": "einen Ordner wählen, in den geschrieben werden darf – unter Windows kann auch OneDrive oder der überwachte Ordnerzugriff der Windows-Sicherheit das Schreiben verhindern",
2217
+ "ui.error.fs.no-permission.agent.hint": "strom wurde von {agent} gestartet, und vermutlich verbietet dessen Sandbox das Schreiben: den Befehl außerhalb der Sandbox genehmigen oder {agent} auf einer Stufe ohne Sandbox arbeiten lassen; sonst einen Ordner wählen, in den geschrieben werden darf",
2218
+ "ui.error.fs.no-permission.agent.windows.hint": "strom wurde von {agent} gestartet, und vermutlich verbietet dessen Sandbox das Schreiben: den Befehl außerhalb der Sandbox genehmigen oder {agent} auf einer Stufe ohne Sandbox arbeiten lassen; sonst einen Ordner wählen, in den geschrieben werden darf – unter Windows kann auch OneDrive oder der überwachte Ordnerzugriff der Windows-Sicherheit das Schreiben verhindern",
2219
+ "ui.error.fs.no-permission.unseen.hint": "strom sieht die Programme nicht, die es gestartet haben, wie in der Sandbox eines Agenten: wurde strom von einem Agenten gestartet, verbietet vermutlich dessen Sandbox das Schreiben – den Befehl außerhalb der Sandbox genehmigen; sonst einen Ordner wählen, in den geschrieben werden darf",
2220
+ "ui.error.fs.no-permission.unseen.windows.hint": "strom sieht die Programme nicht, die es gestartet haben, wie in der Sandbox eines Agenten: wurde strom von einem Agenten gestartet, verbietet vermutlich dessen Sandbox das Schreiben – den Befehl außerhalb der Sandbox genehmigen; sonst einen Ordner wählen, in den geschrieben werden darf – unter Windows kann auch OneDrive oder der überwachte Ordnerzugriff der Windows-Sicherheit das Schreiben verhindern",
2221
+ "ui.error.fs.sandboxed": "keine Berechtigung: {where} – strom läuft unter einem Agenten, und wahrscheinlich verbietet es dessen Sandbox",
2222
+ "ui.error.fs.sandboxed.hint": "den Befehl außerhalb der Sandbox des Agenten ausführen, oder im Ordner der Forschung arbeiten (auch dessen .git und .strom beschreibbar)",
2223
+ "ui.error.git.unwritable": "git kann nicht in die Forschung schreiben: {where}",
2224
+ "ui.error.git.unwritable.hint": "einen Ordner wählen, in den geschrieben werden darf",
2225
+ "ui.error.fs.folder": "statt einer Datei wurde ein Ordner angegeben: {path}",
2226
+ "ui.error.init.unwritable": "der Stammbaum lässt sich in {where} nicht anlegen: das Schreiben dort wird verweigert – nichts davon ist dort geblieben",
2227
+ "ui.error.init.unwritable.hint": "einen Ordner wählen, in den geschrieben werden darf",
2228
+ "ui.error.init.failed": "der Stammbaum lässt sich in {where} nicht anlegen: {detail} – nichts davon ist dort geblieben",
2229
+ "ui.error.init.failed.hint": "ein Ordner auf der eigenen Festplatte dieses Computers (ein Netz- oder umgeleitetes Laufwerk kann das Schreiben oder den Verlauf verweigern)",
2201
2230
  "ui.task.none": "Keine Aufgaben.",
2202
2231
  "ui.research.none": "Keine Forschungsrichtungen.",
2203
2232
  "ui.person.none": "Keine Personen.",
@@ -2270,6 +2299,10 @@
2270
2299
  "ui.error.backup.failed.hint": "Platz auf dem Datenträger freimachen ({where}) und strom erneut starten – oder zurück: strom update --channel {back}",
2271
2300
  "ui.error.backup.failed.update": "Die Sicherung vor dem Wechsel von {from} auf {to} ließ sich nicht erstellen: {detail}. Es wurde nichts installiert.",
2272
2301
  "ui.error.backup.failed.update.hint": "Platz auf dem Datenträger freimachen ({where}), dann erneut strom update --channel {channel}",
2302
+ "ui.error.backup.failed.refused.hint": "Das Schreiben in {where} wird verweigert: einen Ordner wählen, in den geschrieben werden darf, dann strom erneut starten – oder zurück: strom update --channel {back}",
2303
+ "ui.error.backup.failed.other.hint": "strom erneut starten (strom doctor sagt mehr) – oder zurück: strom update --channel {back}",
2304
+ "ui.error.backup.failed.update.refused.hint": "Das Schreiben in {where} wird verweigert: einen Ordner wählen, in den geschrieben werden darf, dann erneut strom update --channel {channel}",
2305
+ "ui.error.backup.failed.update.other.hint": "Erneut strom update --channel {channel} (strom doctor sagt mehr)",
2273
2306
  "ui.error.folder.in-program": "{folder} liegt im Programmordner von strom {program} – ein Update von strom ersetzt, was dort liegt, und die Deinstallation entfernt es, die Forschung mit. Nichts wurde geändert.",
2274
2307
  "ui.error.folder.in-program.hint": "Einen Ordner außerhalb wählen, zum Beispiel {suggested}",
2275
2308
  "ui.error.folder.in-program.default.hint": "Einen Ordner außerhalb angeben: strom setup --home \"{suggested}\" --yes",
@@ -122,7 +122,7 @@ button{font:inherit;color:inherit}
122
122
  .strip.warn{color:var(--warning-text)}
123
123
 
124
124
  /* the sheet of the photos to send */
125
- .sheet{position:fixed;left:0;right:0;top:0;height:var(--vvh,100%);z-index:10;background:var(--bg);display:flex;flex-direction:column;max-width:560px;margin:0 auto}
125
+ .sheet{position:fixed;left:0;right:0;top:var(--vvt,0px);height:var(--vvh,100%);z-index:10;background:var(--bg);display:flex;flex-direction:column;max-width:560px;margin:0 auto}
126
126
  .sheet-head{display:flex;align-items:flex-start;gap:8px;padding:max(12px,env(safe-area-inset-top)) 8px 10px 16px;background:var(--surface);border-bottom:1px solid var(--divider)}
127
127
  .sheet-head>div{flex:1;min-width:0}
128
128
  .sheet-head h2{margin:2px 0 2px}
@@ -1158,16 +1158,17 @@
1158
1158
  $("doneBox").hidden = !handed;
1159
1159
  if (handed) $("doneText").textContent = t("commit.done", { n: b.done });
1160
1160
  // the foot: the camera's photos only here, handing over
1161
- $("captureNote").hidden = !items.some((i) => i.capture && i.blob);
1161
+ // while typing, only what ends the typing: the rest of the foot would take what the keyboard leaves of the sheet
1162
+ $("captureNote").hidden = !!S.typing || !items.some((i) => i.capture && i.blob);
1162
1163
  $("photoRow").hidden = !!S.typing;
1163
1164
  $("typingRow").hidden = !S.typing;
1164
1165
  $("noPersonBtn").hidden = S.typing !== "person";
1165
1166
  const committing = !!(b && b.commit);
1166
- $("commitBtn").hidden = !items.length;
1167
+ $("commitBtn").hidden = !items.length || !!S.typing;
1167
1168
  $("commitBtn").disabled = committing || !items.some((i) => !FINAL(i));
1168
1169
  $("commitBtn").textContent = committing ? t("commit.wait") : t("commit");
1169
1170
  $("commitCancel").hidden = !committing;
1170
- $("commitLater").hidden = !items.length || committing;
1171
+ $("commitLater").hidden = !items.length || committing || !!S.typing;
1171
1172
  };
1172
1173
 
1173
1174
  const renderUnpaired = () => {
@@ -1275,6 +1276,17 @@
1275
1276
  render();
1276
1277
  };
1277
1278
 
1279
+ // the field typed in at the top of the sheet's body, what it offers under it (the keyboard leaves little of the sheet)
1280
+ const keepTyped = () => {
1281
+ const f = document.activeElement;
1282
+ if (!f || (f.id !== "person" && f.id !== "note") || $("sheet").hidden) return;
1283
+ const body = $("sheet").querySelector(".sheet-body");
1284
+ const field = (f.closest && f.closest(".field")) || f;
1285
+ if (!body) return;
1286
+ const off = field.getBoundingClientRect().top - body.getBoundingClientRect().top - 8;
1287
+ if (Math.abs(off) > 1) body.scrollTop += off;
1288
+ };
1289
+
1278
1290
  let lookFor = 0;
1279
1291
  let asked = "";
1280
1292
  const findPeople = () => {
@@ -1317,6 +1329,7 @@
1317
1329
  ul.append(li);
1318
1330
  }
1319
1331
  ul.hidden = !people.length;
1332
+ if (people.length) keepTyped();
1320
1333
  }, 250);
1321
1334
  };
1322
1335
 
@@ -1469,12 +1482,22 @@
1469
1482
  renderPill();
1470
1483
  };
1471
1484
  window.addEventListener("scroll", () => S.newCount && window.scrollY <= 4 && renderPill(), { passive: true });
1472
- // the keyboard: the sheet as high as what is seen of the page, its foot above the keyboard
1485
+ // the keyboard: the sheet as high as what is seen of the page and where it is seen (iOS Safari keeps the page as tall
1486
+ // and moves what is seen of it up above the keyboard: a sheet fixed at the page's top would end under the field), its
1487
+ // foot above the keyboard, the field typed in kept in sight; without visualViewport the sheet is the whole window
1473
1488
  const vv = window.visualViewport;
1474
1489
  if (vv) {
1475
- const fit = () => document.documentElement.style.setProperty("--vvh", `${vv.height}px`);
1476
- vv.addEventListener("resize", fit);
1477
- fit();
1490
+ const place = () => {
1491
+ const root = document.documentElement.style;
1492
+ root.setProperty("--vvh", `${Math.round(vv.height)}px`);
1493
+ root.setProperty("--vvt", `${Math.max(0, Math.round(vv.offsetTop || 0))}px`);
1494
+ };
1495
+ vv.addEventListener("resize", () => {
1496
+ place();
1497
+ keepTyped();
1498
+ });
1499
+ vv.addEventListener("scroll", place);
1500
+ place();
1478
1501
  }
1479
1502
 
1480
1503
  // looked at again: asked at once; every 10 s while open