Spaces:
Running
Running
File size: 4,895 Bytes
afd56bc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | # Stabilizacja CI/CD i Autofix - GrantForge AI
Zaproponowane przez Ciebie zalecenia to doskonały plan ratunkowy (tzw. "firefighting plan"), aby przywrócić stabilność w procesie wytwarzania oprogramowania oraz ulepszyć najbardziej awaryjny punkt systemu — Autofix.
## Proposed Changes
Poniżej znajduje się szczegółowy plan implementacji Kroków 1 i 2, od razu w tej iteracji.
---
### 1. Pre-commit Hooks & Local Checks
Wprowadzimy blokadę błędnych pushy poprzez narzędzie `pre-commit`. Pozwoli to na lokalne wyłapywanie błędów lintingu i testów przed wypchnięciem kodu na serwer.
#### [NEW] [`.pre-commit-config.yaml`](file:///c:/Users/amazu/Desktop/ANTIGRAVITY/DOTACJE/.pre-commit-config.yaml)
- Konfiguracja hooków do `ruff` (linter i formatter) oraz `pytest` (uruchomienie szybkich testów backendowych przed pushem).
- Dodanie instrukcji w README, jak wykonać `pip install pre-commit && pre-commit install -t pre-push`.
#### [NEW] [`scripts/pre_push_tests.sh`](file:///c:/Users/amazu/Desktop/ANTIGRAVITY/DOTACJE/scripts/pre_push_tests.sh)
- Prosty skrypt bashowy odpalany przez `pre-commit` (hook typu pre-push), który uruchomi `pytest tests/` wewnątrz katalogu `backend`. W razie błędu — `git push` zostanie zablokowany.
---
### 2. Autofix Resilience: Backoff, Retry & Fuzzy Matching
Obecnie funkcja `autofix` przekazuje **wszystkie** błędy audytu do modelu przy poprawianiu każdej sekcji osobno, co wywołuje halucynacje LLM. Co więcej, wywołania z Frontendu padają z błędem 429 (Rate Limit).
#### [MODIFY] [`backend/endpoints/projects.py`](file:///c:/Users/amazu/Desktop/ANTIGRAVITY/DOTACJE/backend/endpoints/projects.py)
- **Fuzzy Matching Issues:** Dodanie logiki filtrowania `audit_data["issues"]`. Zamiast przesyłać wszystkie błędy, użyjemy `SequenceMatcher` z biblioteki `difflib`, aby dopasować `issue['affected_section']` do `section_t` (z progiem podobieństwa np. 0.6) oraz dołączyć błędy oznaczone jako "Ogólne". To znacznie poprawi kontekst dla LLM.
- **Backend Retries:** Dodanie `.with_retry(stop_after_attempt=3, wait_exponential_jitter=True)` (lub wbudowanego w klasę modelu `max_retries`) na poziomie łańcucha Langchain (`chain.invoke`), co ukryje błędy 429 z API Google.
#### [MODIFY] [`frontend-react/src/components/project/ProjectAuditPanel.tsx`](file:///c:/Users/amazu/Desktop/ANTIGRAVITY/DOTACJE/frontend-react/src/components/project/ProjectAuditPanel.tsx)
- **Frontend Retry & Backoff Loop:** Ulepszenie pętli `for` wywołującej autofix. Przy napotkaniu `status === 429`, zamiast natychmiast przerywać i zwracać błąd, system poczeka np. 15-20 sekund i spróbuje ponownie, powiadamiając użytkownika toastem "Oczekiwanie na reset limitów AI...".
---
### 3. Wprowadzenie Staging Branch & Zmiany w CI/CD
Aby powstrzymać łamanie gałęzi `main`, wdrożymy model `staging -> main`.
#### [MODIFY] [`.github/workflows/ci.yml`](file:///c:/Users/amazu/Desktop/ANTIGRAVITY/DOTACJE/.github/workflows/ci.yml)
- **Podział ról:**
- `push` na `staging`: Uruchamia pełny pipeline (Lint, Testy, Build) — bez publikacji na główny Render (zablokowany webhook).
- `push` na `main`: Wykonywany tylko przy poprawnym PR ze `staging`. Obejmuje Deploy do Render.com.
- **Uproszczenie:** Rozdzielenie zadań i upewnienie się, że `deepeval` nie blokuje wdrożeń (już ma `continue-on-error`, ale potwierdzimy jego poprawność).
## User Review Required
> [!WARNING]
> **Polityka Staging:** Po zmianie `ci.yml` wymusimy, że bieżący development będzie odbywał się na gałęzi `staging`. Będziesz musiał tworzyć lokalne commity na `staging`, a na `main` przenosić kod przez PR na GitHubie.
> Czy zgadzasz się na zmianę Twojego workflow w Git, w którym `main` stanie się "świętą" gałęzią tylko dla działających wydań, a Ty będziesz pracował na `staging`?
## Open Questions
1. **Staging Environment on Render:** Czy posiadasz już przygotowany darmowy Web Service na platformie Render pod "Staging", czy mam w `ci.yml` pominąć automatyczny deploy ze `staging` do czasu ręcznego utworzenia tego środowiska przez Ciebie?
2. **Pre-commit:** Uruchomienie pre-commit będzie wymagało od Ciebie lokalnego uruchomienia `pre-commit install`. Czy wolisz, abym stworzył prosty skrypt `.bat`/`bash`, który to zautomatyzuje podczas startu?
## Verification Plan
1. **Ręczne wywołanie autofixu:** Weryfikacja logów backendu, aby upewnić się, że po wdrożeniu poprawek do `projects.py`, do LLM wysyłane są tylko filtrowane issues pasujące do sekcji.
2. **Zasymulowanie 429 (Rate Limit):** Wywołanie autofixu na wszystkich sekcjach pod rząd (bez przerw). Upewnienie się, że frontendowy backoff radzi sobie z zawieszeniem i wznawia proces.
3. **Instalacja hooków:** Odpalenie próbnego złego commita i upewnienie się, że hook `pre-push` lub `pre-commit` go odrzuci.
|