Audyt projektu
Trzy narzędzia do sprawdzenia stanu projektu — wklej prompt do agenta AI i dostaniesz raport (SCORE), audyt bezpieczenstwa (SECURITY AUDIT) lub automatyczne naprawy (AUTOFIX).
Kiedy czego uzyc
| PROMPT_SCORE | PROMPT_SECURITY_AUDIT | PROMPT_AUTOFIX | |
|---|---|---|---|
| Co robi | Read-only raport z wynikiem 0-100 | Audyt security: PRD vs kod | Autonomiczne naprawy commit po commicie |
| Czas | 1-3 min | 3-8 min | 5-20 min |
| Modyfikuje pliki | Nie | Nie | Tak (kazdy fix = osobny commit) |
| Kiedy uzyc | Szybki check — chcesz wiedziec gdzie stoisz | Weryfikacja security — czy PRD zgadza sie z kodem | Pelna naprawa — chcesz podniesc score |
| Mozna cofnac | Nic do cofania (nic nie zmienia) | Nic do cofania (nic nie zmienia) | Tak — git revert lub git reset |
PROMPT_SCORE.md
Read-only audyt. Oblicza Project Health Score (0-100) w 4 wymiarach: artefakty, testy, security, docs & process. Nic nie zmienia w projekcie.
Przykladowy raport
═══════════════════════════════════════════════════
PROJECT HEALTH SCORE
Data: 2026-03-15
Projekt: my-saas-app
Faza: Phase 3 Stage 2
═══════════════════════════════════════════════════
SCORE: 62 / 100
Artefakty: 80 / 100 ████████░░
Testy: 55 / 100 █████░░░░░
Security: 45 / 100 ████░░░░░░
Docs & Process: 68 / 100 ██████░░░░
─── Top 5 do poprawy ───
# Problem Wpływ Wymiar
1. Brak docs/SECURITY.md +6 pkt Security
2. Brak testow security +9 pkt Testy
3. HANDOFF checkboxy: 8/20 (40%) +4 pkt Docs
4. Brak rate limiting +3 pkt Security
5. docs/API.md — placeholder +4 pkt Docs
Napraw te 5 problemow → score wzrosnie do ~88.
═══════════════════════════════════════════════════ Pokaz pelna tresc prompta
# PROMPT_SCORE — Read-only Project Health Score
**Szybki odczyt stanu projektu.** Wklej do agenta AI w katalogu projektu — oblicza score 0-100 i wyświetla raport czego brakuje. Nic nie modyfikuje, nic nie commituje.
---
Przeczytaj CAŁY ten plik, a następnie oblicz Project Health Score i wyświetl raport.
## Kontekst — przeczytaj przed startem
Przeczytaj pliki w tym projekcie:
- `ARTIFACT_CHECKLIST.md` (kryteria akceptacji)
- `HANDOFF_STAGES_PLAN.md` (plan z checkboxami)
- `PRD.md` (wymagania)
- `TECH_STACK.md` (decyzje architektoniczne)
Jeśli którykolwiek z tych plików nie istnieje — **ZATRZYMAJ SIĘ** i poinformuj użytkownika:
> "Brakuje pliku [nazwa]. PROMPT_SCORE wymaga kompletnej dokumentacji planistycznej. Uruchom najpierw AGENT_INIT_PROMPT.md do odpowiedniej fazy."
## Twoja rola
Jesteś **read-only audytorem**. Twoje zadanie:
1. Obliczyć Project Health Score (0-100)
2. Wylistować top 5 problemów z największym wpływem na score
3. Wyświetlić raport w terminalu/czacie
**NIE modyfikujesz żadnych plików.** **NIE tworzysz commitów.** **NIE naprawiasz problemów.** Twój output to WYŁĄCZNIE raport w terminalu/czacie.
---
## 📊 Project Health Score (0-100)
4 wymiary × 25% wagi każdy. Oblicz każdy wymiar osobno.
### Wymiar 1: Artefakty (25%)
Dla KAŻDEGO wymaganego artefaktu (lista z `ARTIFACT_CHECKLIST.md`, dostosowana do aktualnej fazy projektu):
| Stan artefaktu | Punkty |
|----------------|--------|
| Plik istnieje + wszystkie wymagane sekcje + treść adekwatna | 100% |
| Plik istnieje + większość sekcji (>50%) | 60% |
| Plik istnieje ale pusty/placeholder | 30% |
| Plik nie istnieje | 0% |
Score = średnia punktów ze wszystkich wymaganych artefaktów dla aktualnej fazy.
**Określenie fazy:** Sprawdź które pliki istnieją i stan HANDOFF — na tej podstawie ustal czy projekt jest w Phase 1/2/3/4/5.
### Wymiar 2: Testy (25%)
1. Wykryj framework testowy z `package.json` / `pyproject.toml` / `go.mod` / `TECH_STACK.md`.
2. Jeśli możliwe — uruchom testy. Jeśli nie (brak runtime/dependencies) — użyj analizy statycznej plików testowych i zanotuj w raporcie.
| Stan testów | Punkty |
|------------|--------|
| Brak frameworku / brak plików testowych | 0 |
| Framework jest, ale 0 testów | 10 |
| Testy istnieją ale FAIL | 20 |
| Testy PASS, ale brak testów security (negative cases) | 60 |
| Testy PASS + testy security obecne | 80 |
| Testy PASS + security tests + smoke test (health + happy path + error path) | 100 |
**Detekcja testów security:** szukaj w plikach testowych: `401`, `403`, `400`, `422`, `invalid`, `unauthorized`, `forbidden`, `injection`, `xss`, `sanitiz`. Minimum 2 takie testy = obecne.
**Detekcja smoke testu:** szukaj pliku `smoke*`, `e2e*`, lub testów z opisem `smoke`, `health`, `e2e`.
### Wymiar 3: Security (25%)
Sprawdź każdy item i zsumuj punkty (max 100):
| Sprawdzenie | Punkty | Jak sprawdzić |
|------------|--------|---------------|
| `.env` w `.gitignore` | 15 | Otwórz `.gitignore`, szukaj `.env` |
| Brak hardcoded secrets w kodzie | 15 | Przeszukaj `*.ts,*.js,*.py,*.tsx,*.jsx` (pomiń node_modules, .git, dist): wzorce `API_KEY=["']`, `PASSWORD=["']`, `SECRET=["']`, `TOKEN=["']` z konkretną wartością |
| Walidacja inputu na backendzie | 15 | Szukaj: zod, yup, joi, pydantic, `Field(`, `validator`, `sanitize`. Min. 1 endpoint z walidacją |
| `docs/SECURITY.md` z treścią | 10 | Plik istnieje i ma >10 linii merytorycznych |
| CORS skonfigurowany | 10 | Szukaj: `cors`, `CORSMiddleware`, `Access-Control`, `allowedOrigins` |
| Security headers | 10 | Szukaj: `helmet`, `X-Content-Type-Options`, `X-Frame-Options`, `Content-Security-Policy` w kodzie lub Caddyfile |
| Rate limiting | 10 | Szukaj: `rate-limit`, `rateLimit`, `throttle`, `limiter` |
| Testy security (negative cases) | 15 | Jak w Wymiarze 2 — jeśli obecne → 15 |
### Wymiar 4: Docs & Process (25%)
| Sprawdzenie | Max punkty | Jak liczyć |
|------------|-----------|------------|
| HANDOFF checkboxy `[x]` odpowiadają stanowi kodu | 25 | (checkboxy [x] / wszystkie checkboxy) × 25 |
| `docs/CHANGELOG.md` — wpisy per stage | 20 | (stages z wpisem / total stages) × 20 |
| `docs/API.md` — endpointy udokumentowane | 20 | >10 linii treści = 20, placeholder = 5, brak = 0 |
| `docs/README.md` — Quick Start obecny | 15 | Sekcja istnieje i nie jest placeholder = 15 |
| Git commity per stage | 10 | Widać commity stage'owe w `git log` = 10 |
| Git repo zainicjalizowane | 10 | `git status` działa = 10 |
### Końcowy score
```
HEALTH_SCORE = (Artefakty × 0.25) + (Testy × 0.25) + (Security × 0.25) + (Docs_Process × 0.25)
```
---
## 📋 Algorytm (liniowy, bez pętli)
1. **Określ fazę projektu** — na podstawie istniejących plików i HANDOFF.
2. **Oblicz każdy wymiar** — zgodnie z tabelami powyżej.
3. **Oblicz końcowy HEALTH_SCORE** — średnia ważona.
4. **Wylistuj TOP 5 problemów** — posortowane malejąco po wpływie na score (ile punktów zyskałby projekt gdyby problem został naprawiony).
5. **Wyświetl raport** — w formacie poniżej.
---
## 📊 Format raportu
```
═══════════════════════════════════════════════════
PROJECT HEALTH SCORE
Data: [YYYY-MM-DD]
Projekt: [nazwa z PRD.md lub katalogu]
Faza: [Phase X / Phase 3 Stage Y]
═══════════════════════════════════════════════════
SCORE: [XX] / 100
Artefakty: [XX] / 100 ████████░░
Testy: [XX] / 100 ██████░░░░
Security: [XX] / 100 ████░░░░░░
Docs & Process: [XX] / 100 █████████░
─── Szczegóły per wymiar ───
Artefakty ([XX]/100):
✓ PRD.md — kompletny
✓ TECH_STACK.md — kompletny
✗ docs/API.md — brak pliku
...
Testy ([XX]/100):
[opis stanu testów]
Security ([XX]/100):
✓ .env w .gitignore
✗ Brak rate limiting
...
Docs & Process ([XX]/100):
✓ Git repo zainicjalizowane
✗ HANDOFF checkboxy: 5/20 (25%)
...
─── Top 5 do poprawy ───
# Problem Wpływ Wymiar
1. [opis] +[N] pkt [wymiar]
2. [opis] +[N] pkt [wymiar]
3. [opis] +[N] pkt [wymiar]
4. [opis] +[N] pkt [wymiar]
5. [opis] +[N] pkt [wymiar]
Napraw te 5 problemów → score wzrośnie do ~[estimated].
═══════════════════════════════════════════════════
```
**Progress bar:** 10 znaków. Każdy `█` = 10 punktów. Reszta = `░`.
---
## ⚠️ Edge cases
- **Brak git:** Zanotuj w raporcie (Docs & Process: -10 pkt). Kontynuuj bez git.
- **Brak testów (score = 0):** Wymiar Testy = 0. Zanotuj w Top 5.
- **Projekt w Phase 1-2 (brak kodu):** Licz score tylko z Artefaktów i Docs & Process (waga 50/50). Testy i Security = N/A.
- **Build się nie kompiluje:** Zanotuj, kontynuuj z analizą statyczną (nie uruchamiaj testów). Wymiar Testy: użyj analizy statycznej plików testowych.
- **HANDOFF nie ma struktury kursu:** Zanotuj brakujące sekcje w raporcie.
- **Checkbox `[x]` ale task nie ukończony w kodzie:** Zanotuj rozbieżność w raporcie.
---
## 🚀 Uruchomienie
Wklej do agenta AI w katalogu projektu:
```
Przeczytaj PROMPT_SCORE.md i oblicz score.
```
**Czas:** 1-3 minuty. **Wynik:** raport w terminalu — zero zmian w projekcie. PROMPT_SECURITY_AUDIT.md
Niezalezny audyt bezpieczenstwa. Sprawdza czy wymagania z PRD i Minimum Security Baseline sa faktycznie zaimplementowane w kodzie i pokryte testami.
Przykladowy raport
═══════════════════════════════════════════════════
SECURITY AUDIT
Data: 2026-03-22
Projekt: local-marketplace
═══════════════════════════════════════════════════
Wymagan security: 12
Pokryte w HANDOFF: 9/12
Pokryte w kodzie: 8/12
Pokryte w testach: 6/12
Luki krytyczne: 2
─── Szczegoly ───
# Wymaganie HANDOFF Kod Test
1. Rate limiting BRAK BRAK BRAK ← KRYTYCZNE
2. OCR walidacja BRAK BRAK BRAK ← KRYTYCZNE
3. Input sanitization [x] CZESCIOWO BRAK
4. API auth [x] OK OK
5. SQL injection [x] OK OK
6. XSS prevention [x] OK OK
7. Secrets management [x] OK BRAK
8. CORS config [x] OK BRAK
─── Rekomendacje ───
1. Dodaj rate-limit middleware na POST /api/listings
2. Wspoldziel walidacje uploadu z endpointem OCR
3. Dodaj testy security dla CORS i secrets
═══════════════════════════════════════════════════ Pokaz pelna tresc prompta
# PROMPT_SECURITY_AUDIT — Iteracyjny, stack-agnostic
**Niezależny audyt bezpieczeństwa projektu.** Wklej do agenta AI w katalogu projektu. Read-only — nic nie modyfikuje.
---
Przeczytaj CAŁY ten plik, a następnie wykonaj audyt bezpieczeństwa projektu.
## Rola
Jesteś niezależnym audytorem bezpieczeństwa. Twoje zadanie: znaleźć prawdziwe podatności, zweryfikować deklarowane zabezpieczenia i ocenić jakość testów.
**Zasady nadrzędne:**
- Nigdy nie ufaj dokumentacji. Czytaj kod źródłowy.
- Nigdy nie ufaj nazwie testu. Czytaj ciało testu.
- Dowody ponad opinie — każdy finding wymaga ścieżki pliku i numeru linii.
- Jeśli znajdziesz problem w obszarze X, zadaj sobie pytanie: "Co jeszcze może być źle w pobliżu?"
---
## Faza 1: Rekonesans (odkryj powierzchnię ataku)
Zmapuj projekt ZANIM zaczniesz audyt. NIE pomijaj tej fazy.
**1.1 Zidentyfikuj stack**
- Przeczytaj pliki w katalogu głównym: package.json, requirements.txt, go.mod, Cargo.toml, Gemfile, Dockerfile, docker-compose.yml, itp.
- Ustal: język(i), framework(i), baza(y) danych, usługi zewnętrzne, metoda deploymentu.
**1.2 Zmapuj powierzchnię ataku**
Znajdź i wylistuj:
- **Entry pointy**: trasy API / kontrolery, resolvery GraphQL, komendy CLI, handlery WebSocket, cron joby
- **System auth**: Jak użytkownicy są uwierzytelniani? Sesje, JWT, OAuth, klucze API?
- **Przepływ danych**: Gdzie wchodzi input od użytkownika? Gdzie jest zapisywany? Gdzie renderowany?
- **Obsługa plików**: Endpointy uploadu, serwowanie plików, pliki tymczasowe
- **Wywołania zewnętrzne**: API firm trzecich, wychodzące HTTP, konsumenci kolejek
- **Zarządzanie sekretami**: Jak ładowane są sekrety? Zmienne środowiskowe, pliki konfiguracyjne, vaults?
- **Middleware / interceptory**: Co wykonuje się przed handlerami? (auth, rate limiting, CORS, logowanie)
**1.3 Inwentaryzacja dokumentacji security**
Znajdź wszystkie pliki dokumentacji dot. bezpieczeństwa (SECURITY.md, threat modele, logi audytowe, sekcje security w README). Wylistuj KAŻDE deklarowane zabezpieczenie — to stanie się checklistą weryfikacyjną dla Fazy 2.
**1.4 Inwentaryzacja testów**
Wylistuj wszystkie pliki testowe. Skategoryzuj: unit, integracyjne, security, E2E. Odnotuj runner testowy i konfigurację (fixtures, mocki, testowa baza danych).
**Output Fazy 1:** Ustrukturyzowane podsumowanie: stack, mapa powierzchni ataku, deklaracje security do weryfikacji, inwentarz testów. To definiuje zakres Fazy 2.
---
## Faza 2: Celowany audyt (weryfikuj i sonduj)
Użyj outputu Rekonesansu do systematycznego sprawdzenia. Dla każdej kategorii poniżej zweryfikuj to, co dotyczy tego projektu.
### 2.1 Uwierzytelnianie i autoryzacja
- [ ] Hasła hashowane silnym algorytmem (bcrypt/scrypt/argon2), nigdy nie logowane ani zwracane w odpowiedziach
- [ ] Wygasanie tokenów/sesji wymuszone, tokeny walidowane na każdym chronionym endpoincie
- [ ] Sprawdzenie autoryzacji na każdym mutującym endpoincie (nie tylko auth, ale ownership/rola)
- [ ] Żaden endpoint nie jest dostępny bez zamierzonego auth (szukaj niezabezpieczonych tras)
- [ ] Sekrety (klucz JWT, klucze API, hasła do bazy): ładowane z env, brak hardcoded wartości domyślnych użytecznych na produkcji, fail-fast jeśli brakuje
### 2.2 Walidacja inputu i injection
- [ ] SQL: Wszystkie zapytania parametryzowane (brak konkatenacji/interpolacji stringów w zapytaniach). Szukaj raw SQL, `execute()`, f-stringów/template literals przy zapytaniach
- [ ] XSS: Treść użytkownika escapowana przy renderowaniu. Szukaj `dangerouslySetInnerHTML`, `innerHTML`, `v-html`, `|safe`, `raw()`, niesanityzowanych zmiennych szablonowych
- [ ] Command injection: Brak inputu użytkownika w komendach shell. Szukaj `exec`, `spawn`, `system`, `subprocess`, `os.popen`
- [ ] Path traversal: Endpointy serwujące pliki walidują nazwy plików (brak `../`). Szukaj path join z inputem użytkownika
- [ ] Deserializacja: Brak niebezpiecznej deserializacji inputu użytkownika (pickle, yaml.load, JSON.parse na niezwalidowanych blobinach)
### 2.3 Rate limiting i ochrona przed nadużyciami
- [ ] Endpointy auth (login, rejestracja, reset hasła) z rate limitem
- [ ] Endpointy tworzenia zasobów z rate limitem (zapobieganie spamowi)
- [ ] Limity rozmiaru plików wymuszone przy uploadzie
- [ ] Jeśli rate limiting jest deklarowany: zweryfikuj czy jest faktycznie aktywny (nie wyłączony w konfiguracji, nie obchodzony w testach)
### 2.4 Ekspozycja danych
- [ ] Odpowiedzi błędów nie ujawniają stack trace'ów, wewnętrznych ścieżek ani struktury bazy w trybie produkcyjnym
- [ ] Odpowiedzi API nie nadeksponują pól (brak hashów haseł, wewnętrznych ID, flag admina zwracanych nie-adminom)
- [ ] Logi nie zawierają sekretów, tokenów ani haseł
- [ ] Pliki .env / credentials w .gitignore
### 2.5 Nagłówki bezpieczeństwa i transport
- [ ] CORS: Allowlista originów (nie wildcard `*` na produkcji), odpowiednie metody/nagłówki
- [ ] Nagłówki bezpieczeństwa obecne: X-Content-Type-Options, X-Frame-Options, Content-Security-Policy
- [ ] HTTPS wymuszone (HSTS, redirect HTTP→HTTPS) jeśli dotyczy
### 2.6 Upload plików (jeśli dotyczy)
- [ ] MIME type walidowany (nie tylko rozszerzenie)
- [ ] Limit rozmiaru pliku wymuszony PRZED wczytaniem do pamięci
- [ ] Pliki graficzne zweryfikowane (magic bytes lub walidacja biblioteką)
- [ ] Uploadowane pliki serwowane z oddzielnej domeny/ścieżki, nie wykonywane
- [ ] WSZYSTKIE endpointy przyjmujące pliki współdzielą tę samą walidację (brak obejścia przez alternatywny endpoint)
### 2.7 Dokumentacja vs rzeczywistość
Dla każdej deklaracji security znalezionej w Fazie 1.3:
- Zweryfikuj w kodzie. Zapisz: ZAIMPLEMENTOWANE / CZĘŚCIOWO / BRAK / NIEPRAWIDŁOWE
- Oznacz każdą deklarację, która jest technicznie prawdziwa ale myląca (np. "zabezpieczone przez auth" gdy obiecano rate limiting)
---
## Faza 3: Deep dive (iteracyjne pogłębianie)
To jest pętla auto-badawcza. Dla każdego findingu z Fazy 2 zadawaj pytania rozszerzające i badaj dalej. Powtarzaj aż przestaniesz znajdować nowe problemy.
**Pętla:**
```
DLA KAŻDEGO findingu F z Fazy 2:
1. ROZSZERZ: "Jeśli F istnieje tutaj, gdzie jeszcze może wystąpić ten sam wzorzec?"
- Ta sama podatność w innych endpointach/komponentach
- Ten sam błąd developera w podobnym kodzie
2. PRZEŚLEDŹ: Podążaj za przepływem danych przez F od początku do końca
- Skąd pochodzi input? Czy można go spreparować?
- Gdzie trafia? Baza, log, odpowiedź, plik, zewnętrzne API?
3. POŁĄCZ: "Czy F można łączyć z innym findingiem dla większego impaktu?"
- np. brak rate limitu + brak CAPTCHA = credential stuffing
- np. obejście uploadu + path traversal = zapis dowolnego pliku
4. ZWERYFIKUJ: Opisz dokładnie jak atakujący wykorzystałby F
- Jeśli nie potrafisz opisać konkretnych kroków, obniż severity
5. ZAPISZ: Dodaj nowe findingi, zaktualizuj severity istniejących
6. POWTÓRZ: Jeśli kroki 1-3 dały nowe tropy, zbadaj je
```
**Warunek stopu:** Pełna iteracja pętli nie produkuje nowych findingów.
---
## Faza 4: Audyt jakości testów
### 4.1 Czy testy uderzają w prawdziwy kod?
- Przeczytaj konfigurację testów (conftest, pliki setup, jest config). Czy klient testowy jest podłączony do prawdziwej aplikacji?
- Czy krytyczne funkcje bezpieczeństwa są wyłączone podczas testowania? (rate limiting off, auth obchodzony, walidacja pominięta)
- Jeśli zmockowane: czy mocki odpowiadają prawdziwemu kontraktowi API (kody statusu, kształty odpowiedzi, formaty błędów)?
### 4.2 Czy testy security testują prawdziwe ataki?
Dla każdego testu security przeczytaj ciało i zweryfikuj:
- Czy wysyła prawdziwy złośliwy payload, czy tylko sprawdza istnienie funkcji?
- Czy asertuje na WŁAŚCIWEJ rzeczy? (kod statusu ORAZ ciało odpowiedzi, nie tylko jedno)
- Czy test mógłby przejść nawet gdyby zabezpieczenie zostało usunięte? Jeśli tak → false positive.
### 4.3 Luki w pokryciu
- Dla każdego findingu z Faz 2-3: czy istnieje test, który by go wyłapał?
- Dla każdego chronionego endpointu: czy jest test na nieautoryzowany dostęp?
- Dla każdej reguły walidacji: czy jest test z nieprawidłowym inputem?
- Wylistuj brakujące testy wg priorytetu.
### 4.4 Test smells
Oznacz: puste ciała testów, `assert True`, testy które mockują to co testują, testy sprawdzające tylko happy path, testy bez asercji, hardcoded wartości "oczekiwane" nie pochodzące z systemu.
---
## Format raportu
```markdown
# Raport audytu bezpieczeństwa
## Podsumowanie projektu
- Stack: [auto-wykryty]
- Powierzchnia ataku: [liczba entry pointów, metoda auth, obsługa plików, usługi zewnętrzne]
- Szacowana ilość kodu: [szacunek]
- Suite testów: [X backend + Y frontend testów, runner, uwagi do konfiguracji]
## Podsumowanie wykonawcze
- Findingi krytyczne: [liczba]
- Wysokie: [liczba] | Średnie: [liczba] | Niskie: [liczba]
- Jakość testów: [SILNA / WYSTARCZAJĄCA / SŁABA / NIEWIARYGODNA]
- Top 3 ryzyka: [jedna linia każde]
## Findingi
### [F1] Tytuł
- **Severity**: KRYTYCZNY / WYSOKI / ŚREDNI / NISKI
- **Kategoria**: auth | injection | ekspozycja | konfiguracja | upload | rate-limit | luka-w-testach
- **Dowód**: `plik:linia` — co robi kod
- **Scenariusz exploitu**: konkretne kroki ataku
- **Rekomendacja**: konkretna poprawka
- **Pokrycie testami**: testowane / nietestowane / test istnieje ale niewystarczający
[powtórz dla każdego findingu, posortowane wg severity]
## Dokumentacja vs rzeczywistość
| # | Deklaracja | Status | Dowód |
|---|-----------|--------|-------|
## Szczegóły jakości testów
| Plik testowy | Werdykt | Problemy |
|-------------|---------|----------|
## Rekomendowane akcje (wg priorytetu)
1. [Poprawki KRYTYCZNE]
2. [Poprawki WYSOKIE]
3. [Brakujące testy do dodania]
4. [Korekty dokumentacji]
```
---
## Zasady anty-halucynacyjne
1. **Brak zakładanych podatności.** Jeśli nie znalazłeś tego w kodzie, to nie jest finding.
2. **Brak zawyżania severity.** Teoretyczne ryzyko bez ścieżki exploitu to NISKI, nie WYSOKI.
3. **Każdy finding wymaga:** ścieżki pliku, numeru linii, snippetu kodu i scenariusza exploitu.
4. **Jeśli dokumentacja nie istnieje**, nie karz za to — audytuj kod taki jaki jest.
5. **Uruchom testy** jeśli możesz. Zielone testy które nic nie testują są gorsze niż brak testów. PROMPT_AUTOFIX.md
Autonomiczny fixer. Oblicza score, znajduje najslabszy punkt i naprawia go — commit po commicie. Petla: modify → evaluate → keep/revert → repeat. Kazdy fix to osobny commit.
Przykladowy raport koncowy
═══════════════════════════════════════════════════
AUTOFIX — Raport koncowy
Iteracji: 7 / 20
Powod: score >= 95
═══════════════════════════════════════════════════
SCORE: 62 → 96 / 100 (+34)
Artefakty: 80 → 100 (Δ +20)
Testy: 55 → 90 (Δ +35)
Security: 45 → 95 (Δ +50)
Docs & Process: 68 → 100 (Δ +32)
Wykonane fixy:
1. ✓ Security — dodano docs/SECURITY.md | +6 | a1b2c3d
2. ✓ Testy — dodano testy security (401, 403) | +9 | e4f5g6h
3. ✓ Security — dodano rate limiting | +3 | i7j8k9l
4. ✓ Docs — uzupelniono docs/API.md | +4 | m0n1o2p
5. ✓ Docs — zaktualizowano HANDOFF checkboxy | +4 | q3r4s5t
6. ✗ Testy — proba smoke testu | 0 | cofnieto
7. ✓ Testy — dodano smoke test (health + error) | +8 | u6v7w8x
Pozostale problemy (wymaga interwencji uzytkownika):
1. .env wymaga uzupelnienia kluczy API
Przeglad: git log --oneline
Cofnij wszystko: git revert --no-edit HEAD~6..HEAD
═══════════════════════════════════════════════════ Pokaz pelna tresc prompta
# PROMPT_AUTOFIX — Autonomiczny fixer projektu
**Prompt autonomiczny w stylu [autoresearch](https://github.com/karpathy/autoresearch).** Wklej go do agenta AI (Claude Code, Cursor, Windsurf itp.) w katalogu swojego projektu. Agent sam obliczy stan projektu, znajdzie problemy i naprawi je — commit po commicie — bez Twojej interwencji.
> Wzorzec: pętla modify → evaluate → keep/revert → repeat. Każdy fix to osobny commit — łatwy do przeglądu i cofnięcia.
---
Przeczytaj CAŁY ten plik, a następnie wykonaj pełną sesję autofix zgodnie z poniższymi instrukcjami.
## Kontekst — przeczytaj przed startem
Przeczytaj pliki w tym projekcie:
- `ARTIFACT_CHECKLIST.md` (kryteria akceptacji)
- `HANDOFF_STAGES_PLAN.md` (plan z checkboxami)
- `PRD.md` (wymagania)
- `TECH_STACK.md` (decyzje architektoniczne)
Jeśli którykolwiek z tych plików nie istnieje — **ZATRZYMAJ SIĘ** i poinformuj użytkownika:
> "Brakuje pliku [nazwa]. PROMPT_AUTOFIX wymaga kompletnej dokumentacji planistycznej. Uruchom najpierw AGENT_INIT_PROMPT.md do odpowiedniej fazy."
## Twoja rola
Jesteś autonomicznym **Project Health Fixerem**. Twoje zadanie:
1. Obliczyć Project Health Score (0-100)
2. Znaleźć najsłabszy punkt
3. Naprawić go (commit)
4. Zweryfikować, czy wynik się poprawił (keep/revert)
5. Powtarzać aż score >= 95 lub wyczerpiesz limit iteracji
**NIE pytasz użytkownika o zgodę na każdy fix.** Działasz autonomicznie. Użytkownik przegląda wynik (commity) po zakończeniu.
---
## 🔒 Pliki chronione (NEVER MODIFY)
Następujących plików **NIGDY nie modyfikujesz**:
- `PRD.md` — zatwierdzone wymagania użytkownika
- `TECH_STACK.md` — zatwierdzone decyzje architektoniczne
- `STACK_GUIDELINES.md` — zatwierdzone wytyczne
- `AGENT_INIT_PROMPT.md`, `ARTIFACT_CHECKLIST.md`, `VERIFICATION_PROMPT.md`, `PROMPT_HANDOFF_CHECK.md`, `PROMPT_AUTOFIX.md` — prompty kursu
- `.env` — sekrety użytkownika
Jeśli problem wymaga zmiany chronionego pliku — zapisz go w raporcie końcowym jako **"wymaga interwencji użytkownika"**.
## 🛡️ Safety Guards
1. **NIGDY nie usuwaj istniejących plików testowych** — możesz dodawać nowe lub naprawiać istniejące.
2. **NIGDY nie usuwaj funkcjonalności** — nie zmieniaj logiki biznesowej, nie usuwaj endpointów.
3. **Każdy fix = osobny commit** z komunikatem: `autofix: [wymiar] — [co naprawiono]`
4. **Przed sesją:** jeśli są niezacommitowane zmiany → `git add -A && git commit -m "autofix: save user work before autofix session"`
5. **Dozwolone operacje:**
- DODAWANIE brakujących plików dokumentacji
- UZUPEŁNIANIE brakujących sekcji w docs
- NAPRAWIANIE broken testów (bez usuwania)
- DODAWANIE brakujących testów (smoke, security negative cases)
- DODAWANIE brakujących zabezpieczeń (walidacja, sanityzacja, headers)
- AKTUALIZACJA checkboxów `[ ]` → `[x]` w HANDOFF (jeśli task jest faktycznie ukończony w kodzie)
- DODAWANIE brakujących sekcji strukturalnych do HANDOFF (User Stories, Docs, Stage Completion — bez zmiany scope)
- NAPRAWIANIE `.gitignore` (dodawanie brakujących wpisów)
- TWORZENIE brakujących plików (`docs/API.md`, `docs/SECURITY.md` itp.)
---
## 📊 Project Health Score (0-100)
4 wymiary × 25% wagi każdy. Oblicz każdy wymiar osobno.
### Wymiar 1: Artefakty (25%)
Dla KAŻDEGO wymaganego artefaktu (lista z `ARTIFACT_CHECKLIST.md`, dostosowana do aktualnej fazy projektu):
| Stan artefaktu | Punkty |
|----------------|--------|
| Plik istnieje + wszystkie wymagane sekcje + treść adekwatna | 100% |
| Plik istnieje + większość sekcji (>50%) | 60% |
| Plik istnieje ale pusty/placeholder | 30% |
| Plik nie istnieje | 0% |
Score = średnia punktów ze wszystkich wymaganych artefaktów dla aktualnej fazy.
**Określenie fazy:** Sprawdź które pliki istnieją i stan HANDOFF — na tej podstawie ustal czy projekt jest w Phase 1/2/3/4/5.
### Wymiar 2: Testy (25%)
1. Wykryj framework testowy z `package.json` / `pyproject.toml` / `go.mod` / `TECH_STACK.md`.
2. Jeśli możliwe — uruchom testy. Jeśli nie (brak runtime/dependencies) — użyj analizy statycznej plików testowych i zanotuj w raporcie.
| Stan testów | Punkty |
|------------|--------|
| Brak frameworku / brak plików testowych | 0 |
| Framework jest, ale 0 testów | 10 |
| Testy istnieją ale FAIL | 20 |
| Testy PASS, ale brak testów security (negative cases) | 60 |
| Testy PASS + testy security obecne | 80 |
| Testy PASS + security tests + smoke test (health + happy path + error path) | 100 |
**Detekcja testów security:** szukaj w plikach testowych: `401`, `403`, `400`, `422`, `invalid`, `unauthorized`, `forbidden`, `injection`, `xss`, `sanitiz`. Minimum 2 takie testy = obecne.
**Detekcja smoke testu:** szukaj pliku `smoke*`, `e2e*`, lub testów z opisem `smoke`, `health`, `e2e`.
### Wymiar 3: Security (25%)
Sprawdź każdy item i zsumuj punkty (max 100):
| Sprawdzenie | Punkty | Jak sprawdzić |
|------------|--------|---------------|
| `.env` w `.gitignore` | 15 | Otwórz `.gitignore`, szukaj `.env` |
| Brak hardcoded secrets w kodzie | 15 | Przeszukaj `*.ts,*.js,*.py,*.tsx,*.jsx` (pomiń node_modules, .git, dist): wzorce `API_KEY=["']`, `PASSWORD=["']`, `SECRET=["']`, `TOKEN=["']` z konkretną wartością |
| Walidacja inputu na backendzie | 15 | Szukaj: zod, yup, joi, pydantic, `Field(`, `validator`, `sanitize`. Min. 1 endpoint z walidacją |
| `docs/SECURITY.md` z treścią | 10 | Plik istnieje i ma >10 linii merytorycznych |
| CORS skonfigurowany | 10 | Szukaj: `cors`, `CORSMiddleware`, `Access-Control`, `allowedOrigins` |
| Security headers | 10 | Szukaj: `helmet`, `X-Content-Type-Options`, `X-Frame-Options`, `Content-Security-Policy` w kodzie lub Caddyfile |
| Rate limiting | 10 | Szukaj: `rate-limit`, `rateLimit`, `throttle`, `limiter` |
| Testy security (negative cases) | 15 | Jak w Wymiarze 2 — jeśli obecne → 15 |
### Wymiar 4: Docs & Process (25%)
| Sprawdzenie | Max punkty | Jak liczyć |
|------------|-----------|------------|
| HANDOFF checkboxy `[x]` odpowiadają stanowi kodu | 25 | (checkboxy [x] / wszystkie checkboxy) × 25 |
| `docs/CHANGELOG.md` — wpisy per stage | 20 | (stages z wpisem / total stages) × 20 |
| `docs/API.md` — endpointy udokumentowane | 20 | >10 linii treści = 20, placeholder = 5, brak = 0 |
| `docs/README.md` — Quick Start obecny | 15 | Sekcja istnieje i nie jest placeholder = 15 |
| Git commity per stage | 10 | Widać commity stage'owe w `git log` = 10 |
| Git repo zainicjalizowane | 10 | `git status` działa = 10 |
### Końcowy score
```
HEALTH_SCORE = (Artefakty × 0.25) + (Testy × 0.25) + (Security × 0.25) + (Docs_Process × 0.25)
```
---
## 🔄 Pętla naprawcza
### Preconditions
1. Sprawdź git — jeśli brak → `git init && git add -A && git commit -m "autofix: initial state"`
2. Jeśli niezacommitowane zmiany → `git add -A && git commit -m "autofix: save user work before autofix session"`
3. Oblicz **INITIAL_SCORE** — pełny raport per wymiar
4. Wyświetl raport początkowy
### Algorytm
```
iteration = 0
MAX_ITERATIONS = 20
MAX_NO_IMPROVEMENT = 3
no_improvement_count = 0
WHILE score < 95 AND iteration < MAX_ITERATIONS AND no_improvement_count < MAX_NO_IMPROVEMENT:
iteration += 1
1. NAJSŁABSZY WYMIAR (najniższy score; przy remisie priorytet: Security > Artefakty > Testy > Docs)
2. ZNAJDŹ KONKRETNY FIXABLE ISSUE w tym wymiarze. Priorytet:
a) Brakujący plik (duży wpływ, łatwy fix)
b) Brakująca sekcja w istniejącym pliku
c) Broken test do naprawienia
d) Brakujący test do dodania
e) Brakujące zabezpieczenie
f) Checkbox do zaktualizowania (jeśli task ukończony w kodzie)
3. WYKONAJ FIX — minimalna, skupiona zmiana (1 problem = 1 fix)
4. COMMIT: git add -A && git commit -m "autofix: [wymiar] — [opis]"
5. OBLICZ NOWY SCORE
6. DECYZJA:
- new_score > old_score → KEEP, no_improvement_count = 0
- new_score <= old_score → git revert HEAD --no-edit, no_improvement_count += 1
7. LOG: "Iteracja N: [fix] | Score: old → new | ✓ KEEP / ✗ REVERT"
```
### Kiedy NIE naprawiać
Jeśli problem wymaga:
- Zmiany chronionego pliku → zanotuj w REMAINING_ISSUES
- Uruchomienia serwera/bazy (brak runtime) → zanotuj
- Naprawy logiki biznesowej → zanotuj
- Tworzenia `.env` z sekretami → zanotuj
- Danych testowych z zewnętrznego API → zanotuj
Kontynuuj z kolejnym problemem.
---
## 📋 Raporty
### Raport początkowy
```
═══════════════════════════════════════════════════
AUTOFIX — Raport początkowy
Data: [YYYY-MM-DD]
Projekt: [nazwa z PRD.md lub katalogu]
Faza: [Phase X / Phase 3 Stage Y]
═══════════════════════════════════════════════════
PROJECT HEALTH SCORE: [XX] / 100
Artefakty: [XX] / 100 ████████░░
Testy: [XX] / 100 ██████░░░░
Security: [XX] / 100 ████░░░░░░
Docs & Process: [XX] / 100 █████████░
[szczegóły per wymiar — co zdane, co nie]
Plan: max [MAX_ITERATIONS] iteracji naprawczych
═══════════════════════════════════════════════════
```
### Log iteracji (na bieżąco)
```
--- Iteracja N / MAX ---
Wymiar: [nazwa] ([score])
Problem: [opis]
Fix: [co zrobiono]
Commit: [hash 7 znaków]
Score: [old] → [new] (+/-delta)
Status: ✓ KEEP / ✗ REVERT
```
### Raport końcowy
```
═══════════════════════════════════════════════════
AUTOFIX — Raport końcowy
Iteracji: [N] / [MAX]
Powód: [score >= 95 / max iteracji / brak poprawy]
═══════════════════════════════════════════════════
SCORE: [XX] → [YY] / 100 (+ZZ)
Artefakty: [XX] → [YY] (Δ +/-ZZ)
Testy: [XX] → [YY] (Δ +/-ZZ)
Security: [XX] → [YY] (Δ +/-ZZ)
Docs & Process: [XX] → [YY] (Δ +/-ZZ)
Wykonane fixy:
1. ✓ [wymiar] — [opis] | score +N | commit: [hash]
2. ✗ [wymiar] — [opis] | brak poprawy, cofnięto
...
Pozostałe problemy (wymaga interwencji użytkownika):
1. [opis + powód]
Przegląd: git log --oneline
Cofnij wszystko: git revert --no-edit HEAD~N..HEAD
═══════════════════════════════════════════════════
```
---
## ⚠️ Edge cases
- **Brak git:** Zainicjalizuj `git init && git add -A && git commit -m "autofix: initial commit"`. Kontynuuj.
- **Brak testów (score = 0):** Dodaj TYLKO smoke test (health endpoint) + 1 test security (niepoprawny input). To podniesie score do ~40-60.
- **Projekt w Phase 1-2 (brak kodu):** Licz score tylko z Artefaktów i Docs & Process (waga 50/50). Testy i Security = N/A.
- **Build się nie kompiluje:** Zanotuj, kontynuuj z analizą statyczną (nie uruchamiaj testów).
- **HANDOFF nie ma struktury kursu:** DODAJ brakujące sekcje (User Stories, Docs, Stage Completion) z pustymi checkboxami. To uzupełnienie struktury, nie zmiana scope.
- **Checkbox `[x]` ale task nie ukończony w kodzie:** NIE cofaj. Zanotuj rozbieżność w raporcie.
---
## 🚀 Uruchomienie
Wklej do agenta AI w katalogu projektu:
```
Przeczytaj PROMPT_AUTOFIX.md i wykonaj pełną sesję autofix.
```
**Czas:** 5-20 minut. **Po zakończeniu:** przejrzyj commity i zdecyduj czy zachować. Jak uruchomic
Otworz agenta AI (Claude Code, Cursor, Windsurf) w katalogu swojego projektu i wklej:
SCORE — szybki odczyt
Przeczytaj PROMPT_SCORE.md i oblicz score. SECURITY AUDIT — audyt bezpieczenstwa
Przeczytaj PROMPT_SECURITY_AUDIT.md i wykonaj audyt bezpieczenstwa. AUTOFIX — pelna naprawa
Przeczytaj PROMPT_AUTOFIX.md i wykonaj pelna sesje autofix.
Oba prompty wymagaja, zeby w projekcie byly juz pliki planistyczne
(PRD.md, TECH_STACK.md, HANDOFF_STAGES_PLAN.md, ARTIFACT_CHECKLIST.md).
Jesli ich nie masz — zacznij od Promptu startowego.