Agent, ktorý riadi telo
Ten istý prevádzkový agent, tentoraz zameraný na jedného človeka namiesto firmy: denný denník, sťahovanie dát z nositeľného zariadenia, genotypizačný array a laboratórny panel zostavené do pravidiel — a každý zdokumentovaný spôsob zlyhania sa zopakoval presne tak, ako bol popísaný.
Agent, ktorý bežne riadi nákup a financie, bol nasmerovaný na stravu, tréning a laboratórne výsledky jedného človeka. Žiadny nový rámec: rovnaké pamäťové súbory, exekútory, brány a týždenná uzávierka. Prvý denník bežal 66 dní a nezaznamenal nič, pretože nemal exekútor. Prerobená verzia odhalila chybu o jeden deň (off-by-one) vo vrstve dátumov u dodávateľa, kalorickú metriku, ktorá klesá so zlepšujúcou sa kondíciou, a chybu odhadu, ktorá je do 8 % pri celých potravinách a 21 – 27 % podhodnotená pri formulovaných produktoch.
Prečo zdravotný projekt patrí na stránku o prevádzkových agentoch
Všetko ostatné na tejto stanici opisuje agenta, ktorý riadi firmu: nákup, poštu, financie, riadenie, dokumenty. Od polovice augusta je ten istý systém nasmerovaný aj na jedného človeka — stravu, tréning, spánok a dve statické klinické dátové sady.
Nevznikol preň žiadny nový rámec. Znovu využíva pamäťové súbory, naplánované úlohy, exekútory, brány a rytmus revízií, ktoré už existovali. Vďaka tomu sa to blíži skôr kontrolovanému experimentu na operačnom systéme než na osobe: zopakoval sa každý spôsob zlyhania, ktorý táto stanica už zdokumentovala, a objavili sa dva nové, ktoré sa prejavia iba vtedy, keď je subjektom telo.
Čo tento článok netvrdí. V čase písania má projekt za sebou menej ako týždeň nameraných dní. Nie je tu žiadny výsledok ani krivka hmotnosti. Čítanie trendu z dvoch dátových bodov je jedno zo zlyhaní uvedených nižšie a tento článok sa ho nechystá spáchať už vo vlastnom úvodnom odseku.
Zásobník (stack)
| Vrstva | Čo to je | Frekvencia |
|---|---|---|
| Denník | jeden markdown súbor, do ktorého sa iba pridáva | denne |
| Exekútor | hook na začiatku relácie kontroluje, či dnešok má riadok; ak nie, agent sa opýta | raz denne |
| Vstup (intake) | fotka vložená do priečinka alebo jedna veta v chate | podľa potreby |
| Sťahovanie z nositeľného zariadenia | naplánovaná úloha voči API platformy hodiniek; surový JSON sa archivuje | denne o 7:00 |
| Ťažba histórie | samostatné spätné doplnenie na požiadanie za 2 569 dní | raz |
| Vrstva pravidiel | 8 pomenovaných pravidiel zostavených z genotypizačného array a laboratórneho panela | statická |
| Týždenná uzávierka | skript zapíše riadok týždňa iba z nameraných dát, bez účasti modelu | nedeľa |
| Dashboardy | generované HTML, jeden na vrstvu | pri každom behu |
| Spätný zápis | dokončené aktivity sa pridajú do kalendára, úlohy do databázy úloh | podľa potreby |
Nič z tohto zoznamu nie je zdravotnícky softvér. Je to tvar akéhokoľvek iného prevádzkového subsystému: vstup, denník, naplánované sťahovanie, brána a týždenná uzávierka.
Verzia jedna: denník bez exekútora
Prvá verzia denníka bežala 66 dní a nezaznamenala ani jeden záznam.
Diagnóza nebola disciplína. Boli tri príčiny a záleží iba na prvej:
- Nikto sa nepýtal. Denník existoval; otázka nie.
- Predimenzovaný návrh na začiatku — 14 denných pripomienok špecifikovaných vo fáze, keď ani jedna z nich nebežala.
- Štruktúra sa musela vytvoriť ešte pred použitím. Týždenné tabuľky sa vytvárali ručne; keď nikto nevytvoril druhý týždeň, záznam sa skončil.
Verzia dva zmenila presne tri veci — jeden exekútor, jedna otázka denne, iba pridávanie bez vopred pripravených tabuliek — a čo je dôležitejšie, niečo odstránila. Ako kompenzácia za pridanie hooku bolo zrušených 14 plánovaných pripomienok, takže čistá zložitosť zmeny je záporná.
Samotná otázka, doslovne:
Projekt 85: čo si dnes jedol/jedla a hýbal/hýbala si sa? (Odrážky stačia, matematiku spravím ja.)
Antipravidlá, ktoré k nej patria, majú rovnakú váhu ako samotná otázka. Nepýtať sa na raňajky: bežne sa vynechávajú, takže prázdne políčko nie je medzera. Nepýtať sa na hmotnosť: tá prichádza z hodiniek. Nikdy viac ako raz denne. Nikdy nemoralizovať — obed z rýchleho občerstvenia sa zaznamená ako čísla, nie ako komentár. Nástroj je meradlo, nie dozorca, a meradlo, ktoré komentuje, sa prestane používať.
Vstup musel stratiť svoj tvar
Verzia jedna zlyhala, pretože vstup potreboval formulár. Verzia dva prijíma fotografiu úplne bez sprievodného textu:
Classify as a meal if A and (B or C):
A phone photo, timestamp today or yesterday
B frame contains food, a drink, a plate, packaging, a receipt or a nutrition label
C file time falls inside a meal window
Time is a supporting signal, never the only one. Content decides.
Do dvoch hodín od spustenia slučky prišli tri nevyžiadané vstupy — fotka len s popiskom „testujem, či vieš, čo s tým máš robiť", zrušený tréning, káva. Dôkazy ukazujú jedným smerom: verzia jedna nevyprodukovala nič 66 dní nie preto, že by hlásenie bolo nevítané, ale preto, že hlásenie muselo mať formát.
Každý odvodený riadok nesie explicitnú značku [estimate] a deklarovanú chybu ±20 – 30 %.
Genóm a krvné testy sú vrstva pravidiel, nie správa
Pod projektom ležia dve statické dátové sady: spotrebiteľský genotypizačný array s približne 700 000 markermi a laboratórny panel starý štyri roky.
Ani jedna sa nepoužíva ako dokument. Boli raz zostavené do 8 pomenovaných pravidiel s explicitnou váhou — tri nesú približne 80 % očakávaného účinku, štyri asi 15 %, jedno asi 5 % — plus prehľadová tabuľka 8 čísel a zoznam antipravidiel: veci, ktoré sa nemajú robiť, pričom ku každej je priložený dôvod naviazaný na vlastné dáta tejto osoby, nie na všeobecné odporúčania.
Najužitočnejším výstupom nebolo odporúčanie. Bolo to toto:
5 z 8 čísel v prehľadovej tabuľke buď neexistovalo, alebo boli staré štyri roky.
Bodovaná správa vyzerá ako súbor záverov. Prevádzkovo je to zoznam meraní, ktoré nikto neurobil. Prvou skutočnou úlohou vrstvy pravidiel bolo premeniť percentily na objednávkový zoznam s cenami a spôsobom objednania — a pri kontrole sa ukázalo, že ceny v prvej verzii pochádzali z lekárskeho sadzobníka, nie z cenníka pre samoplatcov, čím bol jeden test podhodnotený o 46 %. Zovšeobecnená verzia tejto pasce, aj bodovacej pasce pod ňou, je v a-percentile-is-not-a-diagnosis.
Klinické hodnoty sa v systéme nesú ako pomery, nie ako absolútne čísla: jeden pečeňový enzým na 1,9-násobku hornej referenčnej hranice, jeden lipid približne 45 % nad hranicou nízkeho rizika, filtrácia mierne znížená. Rovnaké pravidlo ako pri firemných číslach — pomer nesie zistenie, absolútna hodnota nesie identitu.
Metrika, ktorá sa obracia
Strojom hlásený energetický výdaj počas štyroch tréningov na tom istom stacionárnom bicykli, zoradený podľa priemernej srdcovej frekvencie:
| Priem. SF (tep/min) | kcal/min |
|---|---|
| 121 | 9,1 |
| 127 | 10,1 |
| 133 | 11,2 |
| 136 | 11,3 |
Prvé tri body sú takmer lineárne: +0,17 kcal/min na úder. Štvrtý bod lomí priamku — model predpovedal 11,7, zariadenie hlásilo 11,3, čo je o 3,5 % menej. Z tejto tabuľky vzišli dve pravidlá.
Číslo je funkciou srdcovej frekvencie, nie práce. Zariadenie odvodzuje kalórie zo srdcovej frekvencie. Tréning pri 121 tep/min vykonal viac mechanickej práce než ten pri 133 tep/min — rovnaké trvanie, vyšší odpor, vyššia kadencia — a napriek tomu hlásil o 2,1 kcal/min menej. Takže so zlepšujúcou sa aeróbnou kondíciou ten istý tréning hlási menej kalórií. Ide o zlepšenie, ktoré prichádza zamaskované ako pokles, a akýkoľvek dashboard, ktorý to vykreslí ako trend, to prečíta obrátene.
Plánovať podľa dolnej hranice. Pracovný rozsah je 9,1 – 11,3 kcal/min; plánovacie číslo je 9,1. Rozpočet postavený na hornej hranici nameraného rozsahu je rozpočet, ktorý neexistuje.
Pod oboma pravidlami leží delenie, ktoré prerozdelilo celý projekt: 500 kcal pohybu je 0,065 kg tuku, oproti týždennému aeróbnemu stropu 150 – 180 minút, nad ktorým tréning v deficite začína stáť svaly. Aritmetika je jednoznačná — o hmotnosti rozhoduje tanier, o kondícii bicykel. Nič iné, čo táto inštrumentácia vyprodukovala, nezmenilo toľko rozhodnutí ako toto jedno číslo.
Vrstva dátumov klamala dvakrát
Riadky od dodávateľa nepopisujú všetky ten istý deň. Denné metriky patria dňu D; spánok patrí noci, ktorá začala v deň D, ale dodávateľ ju eviduje pod D+1; pripravenosť (readiness) sa počíta pre ráno dňa D. Pri naivnom spojení do jedného riadku na deň je pripravenosť o deň posunutá oproti spánku — a zlé skóre bolo pripísané dobrej noci skôr, než si to niekto všimol.
Druhá lož bola tichšia. Naplánované sťahovanie beží o 7:00, ešte pred synchronizáciou hodiniek. API vrátilo prázdnu kostru namiesto chyby, úloha skončila s kódom 0 a deň sa zapísal bez údajov o spánku. Jediným prezradením bola veľkosť dát: 78 kB namiesto približne 230 kB.
Obe sú rozobraté v the-readiness-that-belonged-to-yesterday, vrátane dvojriadkového korelačného testu, ktorý dokázal posun.
Jedna štatistická poistka z toho istého subsystému stojí za priame prevzatie: ročný priemer sa uvádza iba vtedy, ak má daná konkrétna metrika za daný rok aspoň 100 nameraných dní. Prvý beh bez váhania porovnal rok so 355 meraniami oproti roku so 6. Mechanicky previazané dvojice sú z výsledkov výslovne vylúčené — tam, kde platforma počíta jednu metriku z druhej, ich r = 0,71 je aritmetika, nie poznatok.
Chyba odhadu nie je rovnomerná
Agent odhaduje kalórie a bielkoviny z fotografií a textu. Keď sa proti týmto odhadom začali kontrolovať etikety, ukázalo sa, že chyba má štruktúru:
| Trieda položky | Chyba |
|---|---|
| Jednoduché celé potraviny (šunka, tvaroh, jogurt, ovocie) | do ±8 % |
| Formulované produkty (nápoje, tyčinky) | podhodnotené o 21 – 27 % |
| Obsah soli v jednom balenom mäse | podhodnotený o 23 % |
Príčinou bola kotva — „proteínový nápoj má okolo 150 kcal" — ktorá mlčky ignorovala pridaný cukor, pridanú vlákninu a mliečny základ. Prijaté pravidlo: žiadny odhad pre formulovaný produkt. Prečítať etiketu, alebo ho označiť [estimate ±25%] a nestavať naň žiadne rozhodnutie.
Jemnejšia chyba bola prenos. Kalibračný bod — bielkovina plus dve zeleniny, bez oleja, najlepší pomer v denníku — bol prenesený z uvareného domáceho jedla na desiatu zjedenú pri stole. Číslo sa prenieslo; exekútor nie. Pri stole nikto nevarí. Pred opätovným použitím kalibračného bodu v novom kontexte overiť, či tam existuje aj osoba alebo proces, ktorý ho vytvoril.
Pomer, ktorý zmenil správanie
Ukazovateľ, ktorý skutočne zmenil rozhodnutia, nebola ani hmotnosť, ani kalórie. Bolo to kcal na gram bielkoviny, počítané na jedlo.
Naprieč zaznamenanými jedlami sa pohyboval od 7,9 do 31,2; denný priemer potrebný na splnenie oboch cieľov je 10,9. Prevádzkovo sa od počítania kalórií líši akciou, ktorú naznačuje. Počítanie kalórií naznačuje menej. Pomer naznačuje iného nositeľa:
Štyri špízy namiesto troch a hranolčekov: −400 kcal, +28 g bielkovín, rovnaká objednávka, rovnaká cena, žiadny pocit obmedzenia.
A rekordné jedlo nebolo to, čo vyzeralo najcnostnejšie. Bolo to jedlo, ktoré nepotrebovalo žiadnu prípravu — tri obaly otvorené pri stole. To je dôležitejšie než samotný pomer, pretože je opakovateľné aj v zlý deň, a protokol, ktorý funguje iba v dobré dni, meria nesprávnu premennú.
Týždenná uzávierka odmieta hádať
Skript bez akéhokoľvek modelu zapisuje riadok týždenného prehľadu: zmena hmotnosti, kroky, tréningy, spánok, pokojová srdcová frekvencia, aktívne kalórie — všetko namerané — a príjem aj dodržiavanie vyparsuje z denníka. Tam, kde denník mlčí, zapíše —. Z jeho vlastnej hlavičky:
Skript preto nikdy nehlási „dodržiavanie 0/7", keď záznamy iba chýbajú; rozlišuje nulu od neznámej hodnoty (—vs0).
Toto rozlíšenie je celým návrhom. Týždenná správa, ktorá vykresľuje chýbajúce dáta ako nulu, vyrába zlyhanie, ku ktorému nedošlo, a čitateľ prestane dôverovať nástroju dávno predtým, než prestane dôverovať plánu.
Náklady a kritérium na ukončenie
Priebežné náklady predstavuje asi pätnásť riadkov v hooku, jedna otázka denne a približne dve minúty písania. Kompenzáciou bolo odstránenie 14 plánovaných pripomienok.
Kritérium na ukončenie je zapísané a datované: ak je k pevne stanovenému dátumu zaznamenaných menej ako 10 dní z 31, tretia verzia nevznikne. Agent oznámi túto skutočnosť a navrhne buď hotovú aplikáciu, alebo úplné zastavenie sledovania. Návyk, ktorý potrebuje tretí zákazkový pokus, nie je problém nástrojov.
Brána, ktorá nepokrýva telá
Jedno záverečné zistenie, a to sa týka skôr tejto stránky než samotného projektu.
Publikačný pipeline má bránu anonymity. Počíta firemné kategórie — pásmo tržieb, počet zamestnancov, sektor, geografiu — a zablokuje zostavenie (build), ak sa v jednom artefakte objaví viac ako jedna. Už predtým zachytila skutočný únik, a to v článku, ktorý už bol označený ako overený.
Až do tohto článku nemala pre telo vôbec nič. Vek, mesto, genotyp, laboratórne hodnoty a tréningový rozvrh sa nenachádzali na žiadnom zozname, pričom sa krížia s firemnými pásmami spôsobom, ktorý brána nedokázala vidieť: jedno firemné pásmo plus jeden klinický detail zúži populáciu rýchlejšie než dve firemné pásma.
Brána teraz obsahuje aj kategóriu tela, počítanú spolu s firemnými voči rovnakej hranici dvoch. Táto zmena bola vykonaná pred zverejnením tohto článku, nie po ňom, a to je jediný detail, ktorý stojí za zopakovanie: pravidlo presadzované tým, že si naň niekto spomenie, je pravidlo bez exekútora — a presne tam tento článok začal.
Pozri tiež
the-readiness-that-belonged-to-yesterday · a-percentile-is-not-a-diagnosis · a-rule-without-an-executor · empty-is-not-zero · the-anonymiser-that-passed
$ head -12 the-agent-that-runs-a-body.md
$ cite the-agent-that-runs-a-body
Citation id SV-9353 is stable. It resolves at
https://stillvalid.dev/sk/c/SV-9353 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.
[Agent, ktorý riadi telo](https://stillvalid.dev/sk/architecture/the-agent-that-runs-a-body) — stillvalid, SV-9353 (deep-dive, verified 2026-08-25)