MACOS · SPAȚII DE LUCRU
Știe ce e pornit pe mașina ta, cui aparține și ce e sigur de oprit.
Ai zece proiecte pe care nu le mai atingi de săptămâni, și niciun mod rapid de a afla care mai țin ceva pornit. Un port ocupat, un proces Node uitat în fundal, un container Docker care încă rulează, un folder node_modules de câteva gigabytes — fiecare se verifică separat, cu o unealtă diferită.
Alternativa e `lsof`, `ps`, `docker ps` și un `du -sh` prin fiecare folder, unul după altul, proiect cu proiect, de fiecare dată când vrei doar să știi ce mai ocupă mașina.
Deckhand le citește pe toate patru independent, apoi leagă ce ține de același loc.
Fiecare suprafață, singură, îți spune un fapt. Legate, îți spun o poveste pe care terminalul n-o poate — că un port, un proces și un container țin toate de același proiect, de care poate te-ai despărțit deja.
“Portul 3000 e ocupat de containerul acme-api, pornit acum 3 zile, din ~/work/acme — proiect pe care l-ai închis vineri.”
Asta e promisiunea pe care `CorrelationEngine.correlate()` e construit s-o țină — nu o captură de ecran. Niciun release n-a ieșit încă, deci nimeni n-a văzut vreun rezultat real al aplicației.
Alegi un proiect. Vezi tot ce mai ține de el pe mașină. Îl închizi într-o singură operație — cu lista exactă a ce se elimină și ce rămâne pentru că e partajat.
Volumele Docker sunt arătate mereu, dar niciodată eliminate prin acest flux — ștergerea unuia e o operație separată, cu risc mai mare, cu propria confirmare.
Patru lucruri care se pot confirma în codul aplicației, nu doar promise aici.
Nu există niciun apel de rețea în codul aplicației, iar fișierul de entitlements e gol. Nimic din ce corelează nu pleacă de pe Mac-ul tău, fiindcă aplicația n-are cu ce să-l trimită.
Sources/ — zero URLSession, NWConnection sau socket; Resources/Deckhand/Deckhand.entitlements
Suita acoperă probele, motorul de corelare, verdictele de siguranță și planificatorul Close Project — și face asta fără să atingă vreo instalare reală de Docker sau vreun proces real.
docs/QUALITY_PLAN.md
Build-ul de release e semnat pentru Mac-uri Apple Silicon și Intel deopotrivă — un singur binar, nu un download separat per arhitectură.
scripts/release.conf — ARCHS="arm64 x86_64"
Deckhand nu cere Docker. Când nu e instalat sau nu rulează, aplicația arată celelalte trei suprafețe și spune asta explicit, în loc să dea eroare.
docs/PRODUCT_BRIEF.md; docs/SOURCE_MAP.md
Legătura dintre un port ocupat pe gazdă și containerul care îl publică se face **pe numărul portului, nu pe identitatea procesului**: pe macOS partea de gazdă a unui port publicat e ținută de procesul de rețea al Docker, care nu aparține niciunui proiect. Aplicația spune asta explicit în propoziția pe care o afișează — „matched by port number, not by process identity” — și marchează dovada ca fiind de încredere medie, nu certă.
Livrat în 0.1.1. Verificat prin teste, cu premisa măsurată pe o mașină reală: un proces cu director de lucru nerezolvabil, nu absent. NEverificat la rulare cu containere active.
Nu. Docker e una din cele patru suprafețe pe care Deckhand le citește, arătată doar când Docker e instalat și pornit. Celelalte trei — porturi, procese, foldere de build — funcționează pe un Mac fără Docker deloc.
Da — descărcarea e pe pagina asta. E semnată cu Developer ID și notarizată de Apple, deci macOS nu avertizează: un dublu-clic obișnuit o deschide de prima dată.
Nu. Close Project nu atinge niciodată volumele. Sunt arătate ca să știi că există, iar ștergerea unuia e un flux separat, cu risc mai mare, ales deliberat.
Nu. Nu există niciun apel de rețea în codul aplicației, iar fișierul de entitlements e gol — tot ce scanează rămâne pe Mac-ul tău.
Rămâne. Deckhand oferă ștergerea unei imagini doar dacă poate dovedi că e construită exclusiv de acest proiect și nefolosită de niciun alt proiect corelat.
+ TVA, calculat la finalizare după țara ta
Deschide aplicația, mergi la Preferințe → Licență și lipește cheia primită pe email.