Zdůvodnění
Stejný argument, který staví zachytávání promptů pod model, staví pod něj i hranici epizody. Worker požádaný, aby otevřel vlastní relaci, ji otevře, když si vzpomene, což nikdy není ta epizoda, na které záleželo — ta, která skončila pádem, kompresí nebo tím, že někdo zavřel okno. Instrukce v bootstrap souboru je žádost a žádost, která se plní někdy, vytvoří záznam o relacích, které dopadly dobře, a ticho o zbytku.
Provider to ví. Spustí událost, když sezení začne, a další, když skončí, a spustí je, ať je model v pozici si toho všimnout, či ne. Hranice se tedy kreslí tam, nebo je fikcí, a toto pravidlo repozitáři brání vydávat druhé za první.
Zmrazení kontextu při otevření vyplývá z existence hranice. .ai/local/session-contexts/ pojmenovala vrstva od začátku a neměl producenta: adresář, který kostra vytvoří a nic jej nenaplní, je slib, který vrstva nedodržuje, a čtenář nerozliší prázdné úložiště od neimplementovaného. To, co do něj patří, je jediný fakt, který nedrží žádný soused — uzavřený záznam říká, co epizoda vyprodukovala, archiv promptů drží lidskou polovinu výměny a ani jedno neříká, co bylo pracovníkovi skutečně řečeno na začátku.
Ten dokument zůstává lokální ze dvou důvodů, které nejsou tentýž. Jmenuje tento stroj a fakt o disku není fakt o repozitáři. A je to snímek projekce: její pozdější opětovné vyhodnocení dá jiný dokument, takže jeho publikování by zveřejnilo něco, co žádný povrch nedokáže reprodukovat.
Požadované chování
Poskytovatel s událostmi životního cyklu má adaptér; ten bez nich se hlásí jako nepodporovaný a nikdy se nepředpokládá, že mlčí. Kde repozitář deklaruje zapojení — záznam enforcement s wired_by: provider-hook:<provider>:session — konfigurace jmenuje shimy, které tento nástroj zapsal, oba jsou spustitelné a syntetický payload provedený koncovým shimem dojde k příkazu. Dry run je to, co činí důkaz bezpečným: běží vše na cestě kromě mutace, protože uzavřít cizí otevřenou epizodu není cena, kterou smí diagnostika účtovat.
Každá událost je idempotentní, protože jsou jí samy události: start se při obnovení spustí znovu a ponechá otevřenou epizodu místo otevření druhé, konec bez otevřené epizody nezapíše nic a není selháním a kompakce bez aktivní úlohy nezaznamená nic.
Na standardní výstup zapisuje jen událost startu, a to jen briefing, který politika deklaruje. Provider tento výstup přidá do kontextu, který se chystá sestavit, což je jediný okamžik, kdy se záznam pokračování může dostat k pracovníkovi, aniž by si o něj musel pracovník vzpomenout říct — a záznam pokračování, který nic nenačte, je záznam, který nikdo nečte. Co smí nést, je omezeno session.briefing_budget_lines a jen na odkazy, štítky divergence, blokátory, které odmítají přijetí, a jednu sekci předávky, podle které pracovník při obnovení jedná. Nikdy nesmí nést konverzaci a session.briefing_on_start: false obnoví starší mlčení pro repozitář, který si to přeje. Události konce a kompakce nezapisují na standardní výstup nic: každá se spouští uvnitř už probíhajícího tahu, kde by výstup změnil, co někdo dělá, místo aby to vybavil.
To je jediná výjimka z pravidla vrstvy, že nic pod local/ se nenačítá do kontextu implicitně, a je záměrně úzká. Toto pravidlo chrání tři věci — žádné přepisy, žádný neomezený růst a žádný fakt o disku, který by se stal faktem o repozitáři — a omezený, deklarovaný briefing bez přepisu na hranici epizody nenaruší žádnou z nich. Nepodmíněná zůstává druhá polovina: nic pod local/ nepublikuje generátor ani se nikdy neposkytuje na veřejném povrchu.
session start zapisuje pracovní kontext epizody a session close připojuje k témuž dokumentu, co ví uzavření; nic jiného žádný nezapisuje a dokument se připojuje, nepřepisuje, takže co do něj pracovník napsal, přežije. Každá otevřená epizoda jej má. Pod úložištěm není nic sledováno gitem a hranice ignorování ho pokrývá, každý dokument začíná schema: session-context/v1, jeho front matter nese jen deklarované klíče a pole pojmenovávající přepis, seznam zpráv či odpověď modelu je porušení — odvozená polovina je výstup builderu a autorská polovina je shrnutí práce, ne konverzace.
Selhání zápisu pracovního kontextu nikdy nestojí epizodu: zaloguje se vedle úložiště a neprázdný log je selhání repozitáře, protože jinak by se úložiště přestalo plnit potichu.
Chování při selhání
Porušení je nález FAIL v kategorii session a příkaz, který jej našel, končí 10. Pod watch je totéž porušení hlášeno jako drift a příkaz končí 11. Nezapojený provider není porušení: repozitář, který nic nedeklaruje, hlásí, že nevytyčuje hranici.
Ověření
mj_validate_session_lifecycle rozhoduje invarianty úložiště a verifikátor zapojení rozhoduje stav providera, obojí dispečované z doctor, watch. Behaviorální případ test/cases/54_session_lifecycle_hooks.sh prokazuje zapojení, idempotenci každé události, briefing, který zapisuje startovní událost, a mlčení ostatních dvou; test/cases/55_session_context.sh prokazuje smlouvu dokumentu a nálezy, které produkuje každá jeho mutace. ADR 0015 zaznamenává rozhodnutí; ADR 0017 zaznamenává briefing a událost compaction.