Okamžik
Minulé úterý se tým dohodl normalizovat callback URI před porovnáním a vyloučil uvolnění porovnání, protože to by přijalo padělané stavy. Dnes čerstvá relace, hledící na stejný nesoulad, porovnání uvolní. Je to rozumná oprava. Je to ta, která byla vyloučena.
Proč k tomu dochází
Rozhodnutí padlo v konverzaci a důvod pro ně také. Další relace nemá ani jedno. Má kód, který vypadá jako nevysvětlené omezení, a silný předpoklad ve prospěch zřejmé změny. Rozhodnutí bez zaznamenaného důvodu nelze revidovat, jen znovu obhajovat — a relace je znovu obhajuje od nuly, s méně informacemi než ta první. Otázka, která měla zastavit merge („potřebuje starý mobilní callback ještě starou podobu?“), byla věta v poznámce předávky, kterou nikdo nebyl povinen číst.
Proč to lepší model nevyřeší
Úvaha druhé relace byla správná. Při přísném porovnání, neshodě a bez zaznamenaného důvodu přísnosti je uvolnění porovnání správný závěr. Chybějícím vstupem nebyla inteligence, ale věta „tohle jsme zamítli a tohle by to propustilo“.
Co to stojí
Přepracování, plus bezpečnostní regrese, kterou přepracování znovu zavede, plus hádka, až si toho někdo všimne. Nejhorší je, že druhé rozhodnutí se obvykle dělá s menším kontextem než první, takže repozitář směřuje k té odpovědi, ke které se nejsnáz dojde jen z kódu.
Co Majordomus dělá
majordomus decision add zaznamená, co bylo rozhodnuto, a vyžaduje --why; rozhodnutí bez důvodu se odmítne, protože důvod je to, co další relace potřebuje. --rejected zaznamená alternativu, která byla vyloučena, a --evidence kam se podívat. Id úlohy a git head se počítají, nikdy nepíší. Záznam se nikdy neupravuje ani nemaže: --supersedes zaznamená, že pozdější rozhodnutí nahradilo dřívější, a odmítne text, který neodpovídá žádnému zaznamenanému rozhodnutí, takže náhrada vždy ukazuje na něco skutečného. Profil deep-work činí záznam rozhodnutí podmínkou finish.
Otázka, na kterou je třeba odpovědět, než lze práci přijmout, není věta v poznámce. majordomus question add ji otevře jako řádek, který nástroj umí číst; finish --outcome completed odmítá, dokud nějaká nevyřešená otázka jmenuje úlohu, a záznam, který kontrola neumí zpracovat, je selhání, ne průchod. Otázka blokuje dál, i když je práce předána nové úloze, a majordomus context vytiskne každou otevřenou otázku nad autorskými záznamy.
Před a po
before the reason existed in a conversation that ended
after majordomus decision add "Normalise the callback URI before comparing state" \
--why "the mismatch is a trailing slash, not a forged state parameter" \
--rejected "relaxing the comparison, which would accept forged states"
# the next session is assembled with it, and `search` finds itJak to ověřit
Zkuste zaznamenat rozhodnutí bez --why: odmítne se. Zaznamenejte jedno se zamítnutou alternativou a přečtěte je zpět pomocí decision list a search; id úlohy a head byly spočteny z gitu, ne napsány.
Co nedělá
Nic nerozhoduje a nehodnotí důvod; slabý důvod v záznamu je pořád v záznamu, což ho činí přezkoumatelným. Nebrání pracovníkovi provést změnu, která odporuje rozhodnutí — staví rozhodnutí, jeho důvod a jeho zamítnutou alternativu před pracovníka dřív, než práce začne.