Pozvánky, ktoré takmer odišli
Zapísať uskutočnené stretnutie do kalendára je neškodné. Zapísať ho aj s účastníkmi už nie.
Agent, ktorý zaznamenával ukončené stretnutia do kalendára, mal k dispozícii jedno zjavné pole: účastníkov. Jeho vyplnenie by skutočným ľuďom odoslalo skutočné pozvánky na stretnutia, ktoré sa už odohrali – pred dňami či týždňami. Pole bolo úplne zakázané namiesto toho, aby sa používalo opatrne, pretože opatrnosť nie je vlastnosť, ktorú by pole mohlo mať.
Symptóm
Agent zapisuje ukončené aktivity do kalendára – ide o spätný záznam, aby sa dal týždeň neskôr rekonštruovať. Stretnutia, cesty, čokoľvek, čo agenta na viac ako 30 minút vzdiali od stola.
Formát udalosti obsahuje pole attendees. Vyplniť ho je zjavný krok: záznam je tak úplnejší a mená sú priamo po ruke v zdroji.
Vyplnenie tohto poľa však odošle pozvánky. Skutočné, e-mailom, skutočným ľuďom, na stretnutia, ktoré sa už odohrali.
Koreňová príčina
Rozhranie API kalendára nerozlišuje medzi zaznamenaním udalosti a jej naplánovaním. Rovnaký endpoint, rovnaký objekt – a práve zoznam účastníkov je to, čo z toho druhého robí odchádzajúcu akciu.
Agent nerobil nič nezvyčajné. Vypĺňal polia, ktoré objekt ponúkal, čo presne znamená vyplniť objekt. Nič v názve poľa nenaznačuje, že práve toto má vonkajší vedľajší účinok, zatiaľ čo ďalších jedenásť nie.
To je ten všeobecný vzor: nezvratná akcia skrytá za poľom namiesto za slovesom. Polia na vedľajšie účinky nikto neaudituje.
Náklady
Nulové, pretože sa to zachytilo už pri písaní pravidla, nie až potom. Práve kontrafaktuál je to, čo stojí za zaznamenanie: spätne odoslaná pozvánka nie je len trápna – je neodvolateľná. Pristane súčasne v niekoho schránke aj kalendári a následné ospravedlnenie osloví menej ľudí než pôvodná správa.
Náprava
Toto pole je úplne zakázané:
attendees — nikdy sa nevypĺňa, za žiadnych okolností. Účastníci sa uvádzajú ako text v popise.
Nie používať opatrne. Zakázané. Na tomto rozdiele záleží, pretože opatrnosť nie je vlastnosť poľa – je to vlastnosť toho, kto ho práve vypĺňa, a pod časovým tlakom to nie je vlastnosť vôbec.
Prevencia
Vyplynuli z toho dve pravidlá.
Vedľajšie účinky vymenúvať podľa poľa, nie podľa endpointu. Rozhranie API sa zvyčajne audituje na úrovni „čo toto volanie robí“. To je o úroveň príliš hrubé: v rámci jedného zápisu sú niektoré polia neutrálne a iné zasahujú do vonkajšieho sveta – a pre hranicu autonómie záleží len na tých druhých.
Ak má pole nezvratný vedľajší účinok a existuje bezpečná alternatíva, zvoľte alternatívu a odstráňte možnosť voľby. Účastníci ako text neuberajú čitateľovi nič, čo by potreboval. Ponechať pole dostupné pre prípady, keď by bolo správne, znamená zachovať možnosť, ktorá má nižšiu hodnotu než zlyhanie, ktoré umožňuje.
$ head -12 the-invites-that-almost-went-out.md
$ cite the-invites-that-almost-went-out
Citation id SV-2809 is stable. It resolves at
https://stillvalid.dev/sk/c/SV-2809 even if this artifact moves to another section,
which a bare URL does not survive. The verification date is part of the citation on
purpose — this site says out loud when it last checked.
[Pozvánky, ktoré takmer odišli](https://stillvalid.dev/sk/failures/the-invites-that-almost-went-out) — stillvalid, SV-2809 (failure, verified 2026-08-14)