From 006b58f6444fda0bfaee273ab079c14ddbc46b7e Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Mon, 3 Aug 2026 01:27:21 +0300 Subject: [PATCH] curatenie.ps1: stergerea artefactelor de lucru dinaintea commit-ului Script determinist (patch-uri, handoff-uri, *.pre_runda*.bak, .bak din cache text, screenshots*/uisync*/.fxp/.err/loguri), cu protectie pe fisierele urmarite de git si mod -DryRun. Referit din reguli_lucru.md (regula 1) si flux-editare-vfp-text.md. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01RYbiinqXxdEqXi53x4Ro7K --- docs/flux-editare-vfp-text.md | 3 +- docs/reguli_lucru.md | 6 ++- utile/curatenie.ps1 | 73 +++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 utile/curatenie.ps1 diff --git a/docs/flux-editare-vfp-text.md b/docs/flux-editare-vfp-text.md index b4b8e5d..c8ba0cb 100644 --- a/docs/flux-editare-vfp-text.md +++ b/docs/flux-editare-vfp-text.md @@ -65,7 +65,8 @@ fals `roundtrip text1 != text2`. Ruleaza atunci cu lista rebazata: dat de Marius, cu valorile lui asteptate — nu doar teste per-fix. Assert-uri pe continutul rezultatului (sume, campuri, randuri), nu pe efecte de suprafata ("a aparut un rand" nu e suficient). -7. Backup-urile `.pre_runda*.bak` si patch-urile se sterg la curatenia de dupa commit. +7. Curatenie dupa commit (backup-uri `.pre_runda*.bak`, patch-uri, artefacte de test): + `powershell -File COMUN\utile\curatenie.ps1` — vezi regula 1 din `reguli_lucru.md`. ## Capcane diff --git a/docs/reguli_lucru.md b/docs/reguli_lucru.md index 908f3bc..a8bb8fc 100644 --- a/docs/reguli_lucru.md +++ b/docs/reguli_lucru.md @@ -7,7 +7,11 @@ review cu rezultatele testelor, nu cu o propunere netestata; daca nu merge, revii cu `git checkout` pe binare (`.vcx`+`.vct`) sau cu write-back din `*.pre_runda*.bak`. Patch-urile (in .gitignore, `docs/diff_runda*.patch`) nu se comit niciodata, raman local. - Dupa commit: sterge patch-urile si backup-urile `*.pre_runda*.bak`. + Curatenia de dinainte de commit NU se face pe cap de agent, ci cu + `powershell -File COMUN\utile\curatenie.ps1` (`-DryRun` listeaza fara sa stearga): patch-uri, + handoff-uri/planuri de runda, `*.pre_runda*.bak`, `.bak`-urile din cache-ul text si artefactele + de test (`screenshots*`, `uisync*`, `.fxp`, `.err`, loguri). Sterge doar fisiere neurmarite de + git — cele tracked sunt sarite. 2. Comentarii in cod: minime, strict functionale, descriu comportamentul CURENT (ca si cum ar fi scris asa de la inceput) — o linie de regula, 2-3 doar pentru metode cu contract nebanal (parametri, cursor asteptat/lasat deschis, pozitionare la iesire). Istoricul modificarilor diff --git a/utile/curatenie.ps1 b/utile/curatenie.ps1 new file mode 100644 index 0000000..fd1d7e9 --- /dev/null +++ b/utile/curatenie.ps1 @@ -0,0 +1,73 @@ +# curatenie.ps1 - sterge artefactele de lucru dinaintea unui commit (regula 1 din COMUN\docs\reguli_lucru.md). +# Sterge DOAR fisiere neurmarite de git; orice fisier tracked (in proiect sau in COMUN) e sarit. +# Utilizare: +# powershell -File COMUN\utile\curatenie.ps1 # curata proiectul si cache-ul text +# powershell -File COMUN\utile\curatenie.ps1 -DryRun # doar listeaza ce ar sterge +param( + [string]$ProjectRoot, + [string]$CacheRoot, + [switch]$DryRun +) + +$ErrorActionPreference = 'Stop' + +if (-not $ProjectRoot) { $ProjectRoot = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent } +$comun = Join-Path $ProjectRoot 'COMUN' +if (-not $CacheRoot) { + $CacheRoot = Join-Path (Split-Path $ProjectRoot -Parent) ('_vfp_textcache\' + (Split-Path $ProjectRoot -Leaf).ToLower()) +} + +# fisierele urmarite de git (proiect + COMUN) - lista de protectie +$tracked = New-Object 'System.Collections.Generic.HashSet[string]' ([StringComparer]::OrdinalIgnoreCase) +foreach ($repo in @($ProjectRoot, $comun)) { + if (-not (Test-Path (Join-Path $repo '.git'))) { continue } + foreach ($f in (& git -C $repo ls-files)) { + [void]$tracked.Add((Join-Path $repo ($f -replace '/', '\'))) + } +} + +$tinte = New-Object System.Collections.ArrayList + +function Adauga($cale, $tipare, $recursiv, $director) { + if (-not (Test-Path $cale)) { return } + $p = @{ Include = $tipare; ErrorAction = 'SilentlyContinue' } + if ($recursiv) { $p['Path'] = $cale; $p['Recurse'] = $true } else { $p['Path'] = (Join-Path $cale '*') } + foreach ($it in (Get-ChildItem @p)) { + if ($director -ne $it.PSIsContainer) { continue } + if ($tracked.Contains($it.FullName)) { continue } + [void]$tinte.Add($it) + } +} + +$docs = Join-Path $ProjectRoot 'docs' +$teste = @((Join-Path $comun 'utile\Teste'), (Join-Path $ProjectRoot 'utile\Teste')) | Where-Object { Test-Path $_ } + +# patch-uri de review, handoff-uri, planuri de runda +Adauga $docs @('diff_runda*.patch', 'handoff*.md', 'plan_runda*.md', 'runda*.md') $false $false +# backup-uri de runda si de cache text +Adauga $ProjectRoot @('*.pre_runda*.bak') $true $false +Adauga $CacheRoot @('*.pre_runda*.bak', '*.vc2.bak', '*.sc2.bak') $true $false +# artefacte din rulari de test +foreach ($t in $teste) { + Adauga $t @('screenshots*', 'uisync*') $true $true + Adauga $t @('*.fxp', '*.err', '*.log', '*_log.txt', 'bash.exe.stackdump') $true $false +} +Adauga $ProjectRoot @('bash.exe.stackdump') $false $false + +# directoarele inglobate in alt director-tinta se sterg oricum odata cu parintele +$dir = @($tinte | Where-Object { $_.PSIsContainer } | ForEach-Object { $_.FullName + '\' }) +$lista = @($tinte | Where-Object { $f = $_.FullName; -not ($dir | Where-Object { $f.StartsWith($_, 'OrdinalIgnoreCase') }) }) + +if ($lista.Count -eq 0) { Write-Output 'curatenie: nimic de sters'; exit 0 } + +foreach ($it in ($lista | Sort-Object FullName)) { + $eticheta = $it.FullName.Replace($ProjectRoot + '\', '').Replace($CacheRoot + '\', 'cache\') + if ($it.PSIsContainer) { $eticheta = $eticheta + '\' } + if ($DryRun) { + Write-Output (' ar sterge ' + $eticheta) + } else { + Remove-Item -LiteralPath $it.FullName -Recurse -Force + Write-Output (' sters ' + $eticheta) + } +} +Write-Output ('curatenie: ' + $lista.Count + ' intrari')