Vertrag: Lokalmodus – Lebensdauer eines Laufs über local mode hinaus (überlebender Harness, Übernahme nach dem Ende von local mode)
tsk-3tzhegcrr48h open
Folgekarte zu #1294 (tsk-qe0ka9e341gh, §15.13 Lokalmodus). #1294 wurde auf Entscheidung (a) von vuur (Review-Team-Lead) auf die zwischen den Vendors geklärten Teile verengt. Dort steht jetzt nur: höchstens ein Harness pro Workspace-Pfad ist garantiert, solange local mode lebt; der Lock gehört allein local mode und wird nie vererbt.
Offen, Gegenstand dieser Karte: der Vertrag für die Lebensdauer eines Laufs über local mode hinaus:
- ein Harness (macOS) oder seine Nachkommen (Linux), die einen
kill -9von local mode überleben, - die Übernahme eines Pfads durch einen neuen Start, nachdem local mode endete, während ein solcher Lauf noch im Baum arbeitet,
- was ein Start dann meldet und wie die Person den Lauf beendet (je OS).
Aus #1294 entfernt (Stand 1d09396a8f8272b759c3a0f03d6a38a20ccf1be7, als Ausgangspunkt): Run-Record maity-local/.runs/<key>, Reason harness_running, Zeile surviving der Zustandstabelle, Vererbung des Lock-Deskriptors an den Harness ("der Lock lebt so lange wie der Lauf").
Startbefunde:
- pmwg P1 (seq 55329): Der Run-Record entsteht erst nach dem Start des Harness. Gibt der Harness den geerbten Lock frei (LOCK_UN/close), kann ein zweiter Start dazwischen den Lock bekommen und findet keinen Record. Vorschlag: Launch-Gate – Prozess blockiert anlegen, Identität/Gruppe dauerhaft veröffentlichen, dann erst ausführen; unterbrochene Veröffentlichung schlägt geschlossen fehl. (Linux-flock-Modell reproduziert.)
- pmwg P2 (seq 55329): Die temporäre Credential-Datei (Kopie unter temporärem Namen) macht ein abgebrochenes F nicht geheimnisfrei. – In #1294 selbst behoben (betrifft den Retry, der bleibt); hier nur zur Vollständigkeit.
- dzse P2 (seq 55388): Nach dem Löschen des Run-Records wartet local mode in
maity waitohne Lock; hat ein Prozess des Laufs den geerbten Deskriptor entsperrt, übernimmt ein zweiter local mode den Pfad, obwohl der erste lebt. Vorschlag: zwei Lock-Dateien – local mode sperrt.locks/<key>über einen nie vererbten Deskriptor (O_CLOEXEC), der Harness erbt nur einen zweiten (etwa.runs/<key>.lock); eine Übernahme braucht beide Locks und einen Record ohne lebenden Lauf. - dzse P3-1 (seq 55388): Ein veralteter Record kann über eine wiederverwendete Gruppen-ID einen fremden Prozess treffen, und die Meldung nennt
kill -TERM -- -<group>; Startzeit prüfen (PID = Gruppen-ID), Ausweg bei veraltetem Record nennen, Kommando je OS (Windows hat keine Gruppe). - dzse Nit (seq 55388): Record vor dem
execschreiben (Sync-Pipe), sonst Fenster fürkill -9unter macOS.