Jeden spis zamiast zgadywania „czy to działa". Dla każdej funkcji: co robi (1 zdanie), gdzie w API/stronie ją znaleźć i jaki ma dziś status. Element bez dowodu (kod + test + endpoint) jest oznaczony ROADMAP, nie LIVE. Doktryna claim ≤ proof.
source:"simulation".
ROADMAP — zaplanowane, nieistniejące dziś jako działający kod. Data weryfikacji względem repo: 2026-07-05.
Zamontowane inline w server.js. Dane demo, efemeryczne, jawnie oznaczone source:"simulation" — nie rejestr operacyjny.
| Funkcja | Co robi | Endpoint | Status |
|---|---|---|---|
| Lista incydentów demo | Zwraca 12 syntetycznych incydentów z filtrami severity/status/group i agregatami by_severity/gap_pct. | GET /api/ip3/incidents | SIMULATION |
| Szczegół incydentu demo | Pojedynczy rekord po public_id; 404 gdy nie istnieje w seedzie. | GET /api/ip3/incidents/:id | SIMULATION |
| Statystyki demo | Agregaty by_severity/by_group/by_evidence_status + gap_pct nad tym samym seedem 12 rekordów. | GET /api/ip3/stats | SIMULATION |
| Biblioteka playbooków | Katalog referencyjny 12 playbooków reagowania (grupa/priorytet/liczba kroków) — kuratorowany, NIE dane operacyjne. | GET /api/ip3/playbooks · GET /api/ip3/playbooks/:type | LIVE (reference) |
Router routes/ip3-api-pro.js, montaż na /api/ip3/v1. Bez DATABASE_URL zwraca 503 (nie udaje persystencji). Większość ścieżek wymaga Authorization: Bearer <JWT> i odpowiedniej roli (operator/analyst/auditor/admin).
| Funkcja | Co robi | Endpoint | Status |
|---|---|---|---|
| Logowanie | Weryfikuje hasło (scrypt), wystawia JWT lokalnie (1h). Konta seedowane tylko gdy operator ustawi IP3_SEED_PASS. | POST /auth/login | auth-gated |
| Profil zalogowanego | Zwraca principal (sub/roles/org) z tokenu. | GET /auth/me | auth-gated |
| Organizacje | Lista organizacji w DB (dziś jedna organizacja — brak multi-tenant, patrz Znane ograniczenia). | GET /orgs | auth-gated |
| Incydenty — lista/filtr | Realne rekordy z PostgreSQL, filtr severity/status, sort po priorytecie. | GET /incidents | auth-gated |
| Incydent — szczegół | Rekord + lista dowodów powiązanych. | GET /incidents/:id | auth-gated |
| Utworzenie incydentu | Walidacja pól wymaganych, nadanie public_id (IP3-rok-hex). | POST /incidents | auth-gated |
| Edycja incydentu | PATCH pól title/description/severity. Pola statusowe (response_status/evidence_status) zablokowane tu celowo. | PATCH /incidents/:id | auth-gated |
| Dodanie dowodu | Rekord evidence z hashem sha256 treści i wpisem chain-of-custody. | POST /incidents/:id/evidence | auth-gated |
| Zamknięcie z dowodem (claim≤proof) | Blokuje zamknięcie (422) bez ≥1 dowodu w statusie CONFIRMED — reguła close-with-evidence. | POST /incidents/:id/close | auth-gated |
| Ponowne otwarcie | Cofa response_status do open, czyści closed_at. | POST /incidents/:id/reopen | auth-gated |
| Legal Trigger Engine | Incydent → obowiązki DORA/NIS2/RODO/AI Act + zegary. Decision-support, nie porada prawna. Flagi override w query. | GET /incidents/:id/legal-triggers | auth-gated |
| Mapowanie MITRE ATT&CK | Heurystyczne mapowanie incydentu na techniki TTP (claim≤proof — sygnał, nie certyfikowana atrybucja). | GET /incidents/:id/ttp | auth-gated |
| Evidence Coverage Score | KPI pokrycia dowodowego (6 wymiarów: dowód potwierdzony, retest, owner, chain-of-custody, mapowanie regulacyjne, zamknięcie z dowodem). NIE ocena bezpieczeństwa. | GET /incidents/:id/coverage | auth-gated |
| Przypisanie właściciela + SLA | Ustawia owner_email, liczy termin SLA wg severity (P0=24h…P3=720h), workflow_status=assigned. | POST /incidents/:id/assign | auth-gated |
| Przejście workflow | open→triaged→assigned→fixing→retest. Stan 'closed' wyłącznie przez /close (nie przez transition). | POST /incidents/:id/transition | auth-gated |
| Budowa zgłoszenia (ticket) | Buduje payload Jira/GitHub Issues z danych incydentu. Zwraca gotowy JSON do wklejenia/API — nie wysyła. | GET /incidents/:id/ticket?system=jira|github | MVP (buduje payload) |
| Statystyki DB | Agregaty by_severity/by_status/gap nad realnymi rekordami organizacji. | GET /stats | auth-gated |
| Audit log | Ostatnie 200 zdarzeń audytowych (auditor/admin). | GET /audit | auth-gated |
| Eksport audytu | Do 1000 zdarzeń w formacie JSON lub CSV (auditor/admin). | GET /audit/export?format=json|csv | auth-gated |
| Mapowanie evidence→control | Incydent → kontrole ISO 27001/NIST-CSF/CIS/DORA/NIS2. Decision-support, nie certyfikacja. | GET /incidents/:id/controls | auth-gated |
| Engagement (DORA/TIBER) | Utworzenie/lista engagementu: scope, crown-jewels, RoE, framework TIBER-EU domyślnie. | POST /engagements · GET /engagements | auth-gated |
| Szczegół engagementu | Rekord + rejestr zdarzeń (white-team-log / evidence-register). | GET /engagements/:id | auth-gated |
| Wpis do rejestru | Dodaje zdarzenie (white-team-log/evidence-register/phase/finding) z opcjonalnym hashem treści. | POST /engagements/:id/log | auth-gated |
| Raport końcowy engagementu | Zamyka engagement. Blokowane (422), gdy brak ≥1 wpisu evidence-register — claim≤proof. | POST /engagements/:id/final-report | auth-gated |
| Pakiet raportu engagementu | Timeline + rejestr dowodów + raport końcowy + manifest + package_sha256; JSON lub PDF do pobrania. | GET /engagements/:id/report-package?format=json|pdf | auth-gated |
| Health warstwy v1 | Informuje, czy DB jest podłączona (bez tego 503 dla operacji zapisu/odczytu). | GET /_health | LIVE (publiczny) |
Wspólny wzorzec: parser zamienia raport narzędzia na znormalizowane findingi → ingestFindings() tworzy incydent + evidence ze statusem MEDIA_SIGNAL (sygnał narzędzia, NIE dowód naprawy) + hash sha256 + chain-of-custody. Dedup po hashu treści — powtórny import tego samego raportu jest bezpieczny (idempotentny). Zamknięcie incydentu nadal wymaga dowodu CONFIRMED.
| Konektor | Co robi | Endpoint | Status parsera |
|---|---|---|---|
| Burp Suite | Parsuje XML eksportu Burp (<issue>) na findingi. | POST /imports/burp | LIVE (parser) |
| OWASP ZAP | Parsuje JSON lub XML raportu ZAP (alerty). | POST /imports/zap | LIVE (parser) |
| Nessus/Tenable | Parsuje CSV (Name,Risk,CVE,CVSS,Host…). | POST /imports/nessus | LIVE (parser) |
| Qualys VM | Parsuje CSV lub XML (QID/VULN/DETECTION). | POST /imports/qualys | LIVE (parser) |
| CSV generyczny | Parsuje dowolny CSV z nagłówkami title,severity,cve,cvss,type,host. | POST /imports/csv | LIVE (parser) |
| JSON generyczny | Przyjmuje {source_tool, findings[]} bez transformacji formatu. | POST /imports/generic | LIVE (parser) |
| DefectDojo | Parsuje eksport DefectDojo (results[]/tablica/findings[]) — most AppSec/pentest. | POST /imports/defectdojo | LIVE (parser) |
| SARIF 2.1 | Parsuje runs[].results[] (CodeQL/Semgrep/GHAS). | POST /imports/sarif | LIVE (parser) |
| SBOM | Parsuje CycloneDX/SPDX — components + vulnerabilities (CRA). | POST /imports/sbom | LIVE (parser) |
| Secret scanning | Parsuje wynik Gitleaks/TruffleHog/GH secret scanning; wartość sekretu jest redagowana przed zapisem. | POST /imports/secrets | LIVE (parser) |
| Cloud posture | Parsuje Prowler/ScoutSuite/Checkov/Trivy — tylko wpisy FAIL. | POST /imports/cloud | LIVE (parser) |
| Reverse engineering | Parsuje YARA JSON/radare2/generic RE — defensywnie, po RoE. ipIII to orchestracja dowodu nad warsztatem RE, NIE disassembler. | POST /imports/re | LIVE (parser) |
| Dedup cross-tool | Deduplikuje listę findingów po fingerprint (title|cve|host) niezależnie od źródła. | POST /tools/dedup | LIVE |
| Transport do Jira/GitHub/SIEM | Realne wysłanie zgłoszenia do systemu docelowego (API ticketowe, webhook SIEM) — dziś ipIII tylko buduje payload, nie wysyła. | — | ROADMAP |
| Funkcja | Co robi | Endpoint | Status |
|---|---|---|---|
| Assign + SLA | Przypisanie właściciela i policzenie terminu SLA wg severity. | POST /api/ip3/v1/incidents/:id/assign | auth-gated |
| Transition workflow | Zmiana stanu roboczego open→triaged→assigned→fixing→retest. | POST /api/ip3/v1/incidents/:id/transition | auth-gated |
| Coverage per incydent | KPI 6-wymiarowe pokrycia dowodowego dla jednego incydentu. | GET /api/ip3/v1/incidents/:id/coverage | auth-gated |
| Budowa ticketu | Payload Jira/GitHub gotowy do wklejenia lub wysyłki przez API klienta. | GET /api/ip3/v1/incidents/:id/ticket | MVP |
| Close-with-evidence | Zamknięcie zablokowane bez dowodu CONFIRMED (422 closure_requires_confirmed_evidence). | POST /api/ip3/v1/incidents/:id/close | auth-gated |
| Strona narzędziowa remediation | Opis lifecycle'u i przykłady wywołań workflow dla operatora. | /remediation | MVP |
| Funkcja | Co robi | Gdzie | Status |
|---|---|---|---|
| Evidence Coverage Score | KPI pokrycia dowodowego (6 wymiarów), API + strona z progami i interpretacją. | GET /incidents/:id/coverage · /coverage-score | MVP |
| Weryfikacja hasha pakietu (bez uploadu) | Porównanie package_sha256 wklejonego JSON z hashem oczekiwanym — liczone w przeglądarce, bez wysyłania treści na serwer. Dowodzi spójności treści, nie jej pochodzenia. | /verify | LIVE (hash bez uploadu) |
| Podpis wystawcy (PAdES/TSA/PQC) | Formalny podpis kwalifikowany + znacznik czasu dla evidence-package — potwierdza autentyczność (kto wystawił), nie tylko integralność treści. | — | ROADMAP (Verify v2) |
| Anonymizer | Deidentyfikacja raportu (maskowanie PII wzorcami regex) licząca się w przeglądarce, bez wysyłki treści na serwer. | /anonymizer | LIVE (w przeglądarce) |
| Evidence-package / board pack | Incydent + dowody + audit trail + manifest + package_sha256 + chain-of-custody. JSON kanoniczny, opcjonalnie PDF do pobrania. | GET /api/ip3/v1/reports/evidence-package/:id?format=json|pdf | auth-gated |
| Funkcja | Co robi | Endpoint | Status |
|---|---|---|---|
| Rejestr stron modułu | Lista wszystkich stron PL+EN modułu ipIII z polem status (LIVE/DANE/ROADMAP/SIMULATION/NOINDEX) i url. | GET /ai-truth/ipIII/pages.json | LIVE |
| Kontrakt OpenAPI 3.1 | Opis referencyjny (nie SLA) głównych ścieżek API z polem x-status per endpoint. | GET /ai-truth/ipIII/openapi.json | LIVE |
| Status modułu | Zbiorczy status ipIII: moduły, priorytety, grupy incydentów, wersja. | GET /ai-truth/ipIII/status.json | LIVE |
| Macierz statusów (strona) | Czytelna dla człowieka wersja rejestru — kategorie i status każdego elementu w jednej tabeli. | /status-matrix | LIVE |
| Przykłady syntetyczne (samples) | Publiczna paczka plików demo (Burp XML, Nessus CSV, evidence-package JSON, board-pack PDF, kolekcja Postman) — bez logowania. | GET /ai-truth/ipIII/samples · GET /ai-truth/ipIII/samples/:file | LIVE |
Strony-narzędzia liczące w przeglądarce lub prezentujące dane referencyjne — bez wysyłki treści na serwer, gdzie to zaznaczone.
Zegar terminów zgłoszeń incydentu (DORA/NIS2/RODO) liczony od podanej daty wykrycia.
KPI pokrycia dowodowego z progami interpretacji (0–100%, 6 wymiarów, wagi równe).
Taksonomia grup A–L (phishing…ciągłość) używana przez playbooki i klasyfikator zgłoszeń.
12 playbooków referencyjnych (jeden na grupę incydentu) z liczbą kroków i priorytetem.
MEDIA_SIGNAL (sygnał
z narzędzia). Zamknięcie incydentu wymaga osobnego dowodu w statusie CONFIRMED — reguła
close-with-evidence (claim ≤ proof), egzekwowana przez API (422), nie tylko opisana.
Powiązane: pełna macierz statusów wszystkich stron → /status-matrix · znane ograniczenia (co jeszcze nie działa) → /known-limitations · kontrakt OpenAPI → /openapi.json.