ADR-006: Ownership sekretów

Decyzja

RolaOdpowiedzialność
Człowiektworzy i rotuje credential (bootstrap / boundary HITL)
Vaultjedyny SSOT sekretu
Recipetylko logiczny credential_ref / vault entry id
Runtimekrótkotrwały lease; revoke po runie / crash path

Zachowanie:

credential istnieje → lease test → kontynuuj automatycznie
credential nie istnieje → needs_human + ticket „bootstrap credential” → bez publikacji

System nie pyta LLM o hasło i nie zapisuje sekretów w ticketach, recipe ani logach NL.

Lease / revoke / audit (wymagania)

TematReguła
Lease TTLDomyślnie ≤ 5 minut; nie dłuższy niż budżet kroku recipe; odnawialny tylko w tym samym run_id
Revoke on successPo zakończeniu upload/kroku — revoke lease (best effort)
Revoke on crashProcess/signal handler + TTL expiry jako backstop; urirun-node nie trzyma hasła poza scope wywołania
AuditLoguj vault.lease, vault.revoke, entry_id, run_id, actornigdy wartości sekretu
Staging vs prodOsobne vault entry id / origin (np. plesk-sftp-staging vs plesk-sftp); zakaz cross-env ref w prod recipes
Expiry mid-uploadJeśli lease wygasa w trakcie: przerwij upload → needs_human lub retry z nowym lease + ten sam plan_hash grant; częściowy upload nie aktywuje release

CURRENT

Konsekwencje