111. Úloha jmenuje, čemu slouží, a vazba je odvozená, připnutá a nikdy neukládaná
Kontext
ADR 0070 učinilo ze záměru typovaný záznam, ADR 0073 přimělo úkol jmenovat kritéria, kterým slouží, a intent preflight obojí spojilo: z úkolu nebo některých cest určí, kterému záměru práce slouží, zda je to údržba, nebo proč nesmí pokračovat. Nic se na to neptalo. start vzalo popis a rozsah; záznam úlohy nejmenoval žádný úkol ani záměr; kontext předaný pracovníkovi neříkal nic o kritériích, pro která práce byla; předávka nesla commit a žádnou stopu záměru, pod kterým byla napsána; a plan start přesunulo úkol do ACTIVE jen podle jeho stavu. Práci na záměru, jehož plán nikdy neprošel kritikou, našlo intent validate až poté, co začala, nikdy ji neodmítlo předem.
Vlastník požádal o uzavření smyčky na tomto konci: relace, která provádí pod intentem, s explicitní, typovanou a auditovatelnou výjimkou, když práce legitimně pod žádným není.
Jak, omezují tři platné věci. Pravidlo project.an-intent-outlives-its-sessions říká, že žádná relace, provider ani předávka nedrží stav záměru. ADR 0047 drží životní cyklus úlohy v shellu, dokud se celý nepřevede, a ADR 0069 říká, že nové rozhodovací chování je typovaná schopnost, ne nový shell. ADR 0052 říká, že epizoda je hranice providera a úloha je volitelný vztah, který nese, takže nic, co epizoda potřebuje, nesmí záviset na úloze.
Rozhodnutí
Jedno odvození. intent_binding::bind obaluje preflight a přidává jen to, co úloha potřebuje vedle něj: záměr zadaný jménem, výjimku, nejednoznačnost, poznámku k rozsahu a dva piny. Odpovídá na něj jedna schopnost jen pro čtení, intents.binding (majordomus-cli intent binding, GET /api/v1/intents/binding, majordomus_intent_binding). Jeho stav je bound, maintenance, exempt nebo refused a každé odmítnutí nese příčinu: sedm z preflightu a nothing_named, unknown_intent, intent_retired, intent_has_no_open_work, issue_outside_intent, ambiguous_intent, unknown_exemption, exemption_without_reason, exemption_names_work.
Shell se ptá a nerozhoduje nic. start, context, handover, handover --resolve a plan start se ptají sestaveného spustitelného souboru přes lib/intent_binding.sh. Odpověď, kterou nelze přečíst, je neznámá a neznámé není nikdy pass: každý volající říká proč a co by to rozhodlo.
Politika rozhoduje, co odmítnutí stojí. intent.binding je off (nebo chybí), advisory nebo required. Když chybí, start bez nových příznaků se na nic neptá a chová se jako vždy, což dostane adopter, jehož politika předchází klíči. Příznak je otázka, kterou worker položil, takže --issue, --intent a --exempt se ptají při každé hodnotě a odmítnutá nebo nečitelná odpověď nezahájí start. Při advisory se ptá každý start a odmítnutí je hlášeno. Při required odmítnutá nebo nečitelná vazba nezahájí start, v start i v plan start stejně, v obou enginech plánu.
Výjimka je deklarovaná třída s důvodem. intent.exemptions uvádí třídy; --exempt <class> --because "<reason>" se zaznamenává v záznamu úlohy a v události knihy task.started. Nedeklarovaná třída, chybějící důvod a výjimka udělená vedle pojmenované práce jsou každá odmítnuty. Odvozená údržba — práce pod milníkem, který žádný záměr nepojmenovává — výjimku nepotřebuje, jak už intent validate dovoluje. Absence záměru sama o sobě nikdy výjimkou není.
Samotné cesty, které dosahují více než jednoho záměru, jsou nejednoznačné. Worker jmenuje úkol.
Záznam drží jména a piny. Záznam úlohy a front matter předávky nesou to, co worker jmenoval, a dva hashe: plan_revision přes výrok každého obsluhovaného záměru, invarianty, non-goals a kritéria, vyřešené úkoly s tím, čemu každý slouží, a nálezy každé kritiky s jejich řešeními; a evidence_standing přes stav důkazů každého obsluhovaného kritéria. Jsou dva, protože odpovídají na různé otázky: běžný commit může zastarat důkazy, aniž se kdo dotkl toho, k čemu práce slouží. handover --resolve se na vazbu zeptá znovu a řekne unchanged, evidence_moved nebo plan_changed, případně unknown, když se zeptat nemůže. Nikde se neukládá žádná fáze, verdikt, kritérium ani stav důkazů; pravidlo project.an-intent-outlives-its-sessions se mění na verzi 3, aby říkalo, že deklarované jméno a hash porovnaný při čtení nejsou stavem záměru a že úkol, který úloha pojmenovala, je odkaz declared ve spojení realizace.
Vazba odmítne start; neposuzuje dokončení. Zda úloha, která tvrdí completed, splnila kritéria, kterým sloužila, je otázka dokončení, kterou ADR 0107 drží mimo verdikt záměru a kterou vyřeší pozdější rozhodnutí.
Důsledky
- Repozitář, který nastavuje
required, musí mít sestavený spustitelný soubor: shell na vazbu sám odpovědět nemůže, záměrně, a požadovaný gate, který prošel, když nemohl číst, by gate nebyl. - Tento repozitář nastavuje
advisorya měření říká proč. 221 odlišných rozsahů, které jeho relace zadalystart(každá událosttask.startedv účetních knihách primárního checkoutu a jeho worktree, 2026-10-07), bylo každé položenointents.bindingjen podle cest proti plánu při této změně: 183 (83 %) bylo odmítnuto — 180 jakoambiguous_intentspolu sintent_not_critiqued, 3 jen jakoambiguous_intent— 30 (14 %) bylo navázáno a 8 (4 %) byla údržba. Rozsah tak široký jako.ai/repo docs sitese překrývá s úkoly několika záměrů aintent-lifecyclenemá kritiku.requiredby odmítl pět startů ze šesti za pojmenování rozsahu tak, jak to dnes dělá každá relace, takže čeká, až relace začnou jmenovat úkol ze zvyku a plán onoho záměru projde kritikou; číslem ke sledování je odmítnutý podíl startů, které nejmenují nic. - Kritika se stále posuzuje podle své přítomnosti a otevřených blokujících nálezů. Zaznamenává commit, při kterém byla napsána, a žádnou revizi plánu, který revidovala, takže zastaralost nemá s čím být porovnána; milník opozice dává záznamu kritiky
plan_revision, který revidovala, a jeho odmítnutí znovu používá zde vypočtený hash. - Epizoda není vázána. Relace poskytovatele, která edituje bez otevřené úlohy, je mimo toto rozhodnutí, jak požaduje ADR 0052; práci takového druhu drží kontrola rozsahu na
check,finisha pre-push. - Životní cyklus úlohy získává shellový kód, který se ptá, formátuje a odmítá. Nic nerozhoduje a přesune se do Rustu se zbytkem životního cyklu podle ADR 0047.
Zamítnuté alternativy
- Ukládat rozlišený záměr do záznamu úlohy. Skončilo by to s úlohou, rozcházelo by se se záznamy v okamžiku úpravy kritéria a odporovalo by pravidlu, že původ se odvozuje. Připnutí stojí jedno čtení navíc a nemůže se rozejít se svým zdrojem.
- Ukládat jen úkol a záměr odvozovat. Worker, který jmenuje záměr přímo, by neměl nic zaznamenáno a další čtenář by nerozeznal „pojmenoval záměr“ od „nepojmenoval nic“.
- Jeden hash revize. Hlásil by drift při každém commitu, který změnil vstupy testu, a řádek, který se ukazuje vždy, se přestane číst.
- Odmítnout rozsah mimo rozsah jmenovaného úkolu. Rozsahy úkolů běžně vynechávají vygenerované projekce, které změna musí znovu vygenerovat; vazba to říká v poznámce a kontrola rozsahu zůstává kontrolou rozsahu úlohy samotné.
- Kontrolovat jen
start.plan starta schopnostplan.transitionjsou druhý způsob, jak práce začíná, a kontrola s dveřmi vedle sebe je jen rada. - Udělat z
requiredvýchozí hodnotu.startkaždého adoptujícího by po aktualizaci začalo odmítat z důvodu, který jeho repozitář nikdy nedeklaroval.