Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Trvalý záznam pojmenovává relaci, která ho napsala, a vztahuje úlohu jen tehdy, když je ta úloha této relace

Trvalý záznam pojmenovává relaci, která ho napsala, a vztahuje úlohu jen tehdy, když je ta úloha této relace

majordomus://adr/adr-0164navrženo relacepřipsánírecords

odkazuje na

odkazuje na něj

164. Trvalý záznam jmenuje relaci, která ho zapsala, a vztahuje úlohu jen tehdy, když je úlohou té relace

Kontext

Dva workeři sdílejí jeden checkout. Worker A zahájí úlohu. Worker B, jiná relace providera, zaznamená rozhodnutí, checkpoint a otázku, zatímco je úloha A aktivní. Dnes jsou všechny tři záznamy zařazeny pod úlohu A a žádný nejmenuje B: lib/decision.sh, lib/checkpoint.sh a lib/question.sh berou úlohu ze záznamu aktuální úlohy checkoutu (mj_load_current) a obálka knihy označí relaci, kterou mj_open_session_id vyřeší. Toto řešení zkouší nejdřív vlastní epizodu volajícího — MJ_SESSION_KEY, pak relaci providera, kterou volající dodá (MAJORDOMUS_PROVIDER_SESSION nebo proměnná, kterou deklaruje jeho lifecycle adaptér) — a když volající nedodá žádnou, propadne na ukazatel checkoutu, který jmenuje epizodu otevřenou naposled. lib/common.sh tento poslední krok nazývá „dohad, který výstup stavu říká nahlas, ne fakt“. Plánovaný úkol I0701 reprodukuje tuto mezeru jako spustitelný případ (případ 3049).

Ani záznam aktuální úlohy nerozliší pracovníky: lib/start.sh zapisuje owner z --owner nebo $USER, tedy stejnou hodnotu pro každého pracovníka na jednom stroji, a žádný čtenář ji s volajícím neporovnává. Řádek knihy task.started však už ve své obálce nese relaci, která úlohu otevřela.

Tři omezení jsou stanovena před jakoukoli volbou. project.no-new-nouns: nástroj nevede žádnou vlastní identitu pracovníka. ADR 0047: identita pracovníka je ta, kterou někdo dodal, nikdy odvozená, a id relace poskytovatele je korelační id, nikdy identita epizody. ADR 0044 a ADR 0103: pozice na nástěnce není identita pracovníka a epizoda je klíčována identitou, kterou klient dodává a umí reprodukovat. ADR 0052: existence záznamu nikdy nezávisí na stavu úlohy — checkpoint mimo úlohu nezaznamenává žádnou úlohu a přesto se zapíše.

Rozhodnutí

Trvalý záznam se připisuje relaci, která spustila příkaz, a s úlohou se spojí jen tehdy, když tuto úlohu otevřela táž relace.

  1. Přiřazení je stávající klíč obálky. Řádek knihy decision.recorded, question.opened a task.checkpoint nese session, jako každý řádek knihy. Nezavádí se žádné nové pole, úložiště ani identita; relace poskytovatele nebo worker, které volající dodá, zůstávají uvnitř záznamu, který vysvětlují, a jeho řádku knihy, jako dnes.
  2. Žádný odhad. Když volající neposkytne vlastní identitu a v checkoutu je otevřená více než jedna epizoda, záznam se zapíše bez session — připsán nikomu, ne tomu, kdo naposledy otevřel epizodu. Ukazatel zůstává odpovědí pro výstup stavu, který říká, že je to odhad; do záznamu se nikdy nezapíše jako fakt.
  3. Úloha je spojena jen tehdy, když je volajícího. Záznam jmenuje aktivní úlohu, když je relace na řádku task.started té úlohy relací volajícího. Jinak záznam nejmenuje žádnou úlohu — tvar s vynechaným task_id, který lib/checkpoint.sh už píše mimo úlohu — a přesto se zapíše, jak vyžaduje ADR 0052.
  4. Nic se neodmítá kvůli atribuci. Příkaz, který nemůže atribuovat, zapíše neatribuovaný záznam; nikdy neselže kvůli chybějící identitě.

Zamítnuté alternativy

Odmítnout zápis, když aktivní úloha patří někomu jinému. Nedokáže odhalit případ, pro který existuje: oba workery mají na jednom stroji stejné owner a záznam aktuální úlohy nedrží žádnou relaci, takže odhalit cizí úlohu znamená držet v tom záznamu identitu workera — podstatné jméno, které project.no-new-nouns zakazuje. Odmítnutí na checkpoint opakuje výpadek, který zaznamenává ADR 0052, kde checkpoint hooku životního cyklu byl přeskočen a skončil s 0. A úloha spuštěná přes --owner jménem agenta by odmítla jediného legitimního workera.

Vyžadovat pojmenování úlohy při každém zápisu. Nepotřebuje identitu, ale každý jednotlivý pracovník platí za problém, který mají jen souběžní pracovníci, při každém rozhodnutí a checkpointu. Checkpointy, které zapisuje hook životního cyklu poskytovatele, nemají kdo úlohu pojmenovat, takže jsou buď odmítnuty — opět cesta ADR 0052 — nebo zapsány bez úlohy, což dělá požadavek bezvýznamným tam, odkud většina checkpointů pochází. question add už bez úlohy odmítá a project.the-session-context-is-derived zaznamenává, jak málo se tito zapisovatelé používají, když přidávají tření.

Důsledky

  • Implementace (úkoly po I0702 v milníku M002) mění tři zapisovatele a rozlišení obálky, nepřidává žádné úložiště a zčervená dvě připnutá tvrzení případu 3049; změna je přepíše, aby tvrdila attribution, kterou tento záznam volí.
  • Poskytovatel, který nedeklaruje proměnnou relace, dostává nepřiřazené záznamy, když je otevřeno několik epizod, místo chybně přiřazených. To je cena, kterou toto rozhodnutí přijímá, a dopadá na adaptér toho poskytovatele, který může svou proměnnou deklarovat.
  • Jediný worker nevidí žádnou změnu: jeho relace úlohu otevřela, takže jeho záznamy jmenují úlohu jako dřív.
  • Podmínky implementace: připsání se počítá jednou, v obálce, a čtou ho všichni tři zapisovatelé; porovnání s task.started čte knihu, kterou checkout už má; test dokazuje nepřipsaný zápis, když jsou otevřeny dvě epizody a volající nic nedodá.

Odkud to pochází

kanonický soubor
.ai/repo/adrs/0164-a-record-names-the-session-that-wrote-it.md
identity
adr-0164
dostupné také jako
Zdroj MCP majordomus://adr/adr-0164 · majordomus entity show adr/adr-0164 · GET /api/v1/entity?uri=majordomus://adr/adr-0164
v Cockpitu
/cockpit/objects/adr/adr-0164

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

Prohledává názvy a popisy všech stránek, které tento web publikuje.