MACOS · SPAȚII DE LUCRU

Deckhand

Știe ce e pornit pe mașina ta, cui aparține și ce e sigur de oprit.

derulează

Problema

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.

Mecanismul

O scanare, patru suprafețe

Deckhand le citește pe toate patru independent, apoi leagă ce ține de același loc.

PorturiPorturile TCP pe care ceva de pe Mac-ul tău ascultă chiar acum.
ProceseProcesele de dezvoltare din spatele acelor porturi — ce sunt și de cât timp rulează.
Foldere de buildCe a rămas regenerabil în urma fiecărui proiect — node_modules, .next, .build, DerivedData, target, build, dist.
ContainereContainere, imagini, volume și cache de build Docker, corelate după directorul de lucru din Compose — apar doar când Docker e instalat și pornit.

De ce corelare

Rostul legăturii dintre ele

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.

Fluxul

Close Project

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.

Ce se elimină
  • Procesele active
    Oprite, dacă PID-ul și directorul de lucru sunt confirmate în scanarea curentă.
  • Containerele proiectului
    Eliminate, când directorul de lucru din Compose al unui container corespunde proiectului ales.
  • Folderele de build
    Mutate la Coșul de gunoi — niciodată șterse direct, și niciodată volume Docker.
  • Imaginile exclusive
    Eliminate doar dacă imaginea e construită de acest proiect și nu e partajată cu altul.
Ce rămâne, și de ce
  • Imaginile de bază și cele din registry
    Păstrate — apartenența unei imagini trase (pull) nu se presupune niciodată.
  • Imaginile partajate
    Păstrate, când aceeași imagine aparține mai multor proiecte corelate.
  • Volumele Docker
    Păstrate întotdeauna. Ștergerea volumelor e un flux separat, cu risc mai mare, niciodată parte din Close Project.

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.

Ce se poate verifica azi

Patru lucruri care se pot confirma în codul aplicației, nu doar promise aici.

Nu sună niciodată acasă

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

Testat fără să atingă mașina ta

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

Binar universal

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"

Absența Docker e o stare normală

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

Cerințe

Sistem
macOS 14.0 sau mai nou
Arhitectură
Universală — Apple Silicon și Intel
Construit cu
Swift 6, SwiftUI

Unde a rămas

Cum se face legătura cu portul

v0.1.2

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.

Întrebări

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.

65 €

+ TVA, calculat la finalizare după țara ta

Activare

Cum activezi licența

Descarcă aplicația

Descarcă versiunea 0.1.2

2.6 MB

Deschide aplicația, mergi la Preferințe → Licență și lipește cheia primită pe email.