Tranzitívna závislosť sa do aplikácie dostáva nepriamo. Projekt si vyberie jeden balík, ten si vyžiada ďalší a balíčkovací manažér automaticky zostaví výsledný graf. Tento nepriamy komponent môže zásadne ovplyvniť aplikáciu, aj keď sa jeho názov nikde v hlavnom manifeste neuvádza.
Ako sa nepriame balíky dostávajú do buildu
Balíčkovacie manažéry čítajú požiadavky deklarované jednotlivými komponentmi a vyberajú sady verzií, ktoré im vyhovujú. Jedna priama závislosť tak so sebou môže priniesť hneď niekoľko úrovní ďalších balíkov. Spoločné požiadavky sa môžu zlúčiť, zatiaľ čo konfliktné závislosti môžu do grafu zaradiť viacero verzií toho istého komponentu.
Rozdiel spočíva v spôsobe, akým sa balík do projektu dostal, nie v tom, či sa reálne spúšťa. Tranzitívny balík môže slúžiť iba pre vývoj, môže byť pribalený do produkcie, prípadne sa načítava až za behu aplikácie. Vyriešený lockfile a skompilovaný artefakt preto prinášajú oveľa spoľahlivejšie dôkazy než samotný manifest.
| Typ závislosti | Deklaruje ju | Viditeľná v manifeste | Otázka pri audite |
|---|---|---|---|
| Priama | Aplikácia | Áno | Prečo si ju tím vybral? |
| Tranzitívna | Iný balík | Zvyčajne nie | Ktorý priamy balík ju vyžaduje? |
| Voliteľná | Balík za určitej podmienky | Rôzne | Je táto podmienka aktívna? |
| Iba pre vývoj | Nástroje pre build alebo testy | Často áno | Môže zasiahnuť produkčný artefakt? |
Prečo na nepriamych závislostiach záleží
Nepriamy komponent so sebou môže priniesť známu zraniteľnosť, licenčnú povinnosť alebo problém s údržbou rovnako ako priamy balík. Odstrániť ho však býva náročnejšie, pretože aplikácia nemá pod priamou kontrolou požiadavky na jeho verziu. Tím preto musí často aktualizovať, nahradiť alebo prekonfigurovať priamu závislosť, ktorá ho do systému zaviedla.
To radí cesty závislostí medzi kľúčové faktory ovplyvňujúce riziko závislostí (dependency risk). Pri posudzovaní vyvstávajú konkrétne otázky:
- Pôvod: Ktorý priamy balík daný komponent zaviedol?
- Verzia: Ktorú verziu balíčkovací manažér vybral?
- Dosiahnuteľnosť: Dostávajú sa používateľské vstupy k zraniteľnému kódu?
- Prostredie: Nachádza sa komponent v produkcii, alebo len vo vývojových nástrojoch?
- Kontrola: Dá sa táto verzia bezpečne obísť, aktualizovať alebo úplne odstrániť?
Ako audit sleduje graf závislostí
V rámci auditu vibe-coded softvéru sa analyzuje kompletný strom závislostí a porovnáva sa s kódom a artefaktmi. Analýza zloženia softvéru dokáže nepriame balíky identifikovať, zatiaľ čo zoznam softvérových komponentov zaznamenáva ich vzájomné vzťahy v rámci konkrétneho buildu.
Audítor následne sleduje dôležité nálezy späť k samotnej aplikácii. Táto cesta ukazuje, ktorý balík danú požiadavku definuje a aká zmena by mohla riziko eliminovať. Testy sú kľúčové, pretože aktualizácia o niekoľko úrovní nižšie môže zmeniť správanie, na ktoré sa spolieha priamy balík.
Ako udržať graf prehľadný
Lockfile zabezpečuje opakovateľnosť zostavenia aplikácie, no negarantuje, že každý vybraný komponent je tam zámerne. Tímy by mali pravidelne vyhodnocovať významné prírastky, odstraňovať nepoužívané priame balíky a aktualizovať prehľady pri zmenách v buildoch. Cieľom je graf závislostí, ktorého dôležité cesty dokážete vysvetliť a aktualizovať bez dohadov.
Táto disciplína nadobúda na význame, keď generovaný kód pridáva nový balík na každú čiastkovú úlohu. Prechod na produkčné fungovanie popísaný v článku o rozdiele medzi vibe codingom a agentovým inžinierstvom vyžaduje plnú kontrolu nad nepriamym kódom, ktorý prichádza s každým priamym rozhodnutím.