# K01 `heap4` — punkt zatrzymania

## Stan repozytorium

- Data: `2026-07-14`.
- Commit bazowy: `8aee0b104c4f6e6ffef119ab6f57a3e724144221`.
- Gałąź robocza: `work/list-first-rp2350-debug`.
- Zmienione źródła: brak.
- Zmieniona karta PDF: brak.
- Lokalny stan `.stem/`: wygenerowany przez testy `stemctl`, nie jest częścią karty.
- Review Claude: nieukończony; dwie sesje CLI nie zwróciły wyniku i zostały zatrzymane.

## Potwierdzone

- [x] `make host` buduje 10/10 programów.
- [x] Wszystkie programy hostowe uruchamiają się z kodem `0`.
- [x] `make tasks RV_ENV_ROOT=...` buduje 10/10 ELF dla RV32I.
- [x] `stemctl test native-amd64 freertos heap4 10` przechodzi.
- [x] RP2350 Probe jest wykrywany bez `sudo` po wejściu do grupy `rpdebug`.
- [x] OpenOCD wykrywa `rp2350.rv0` i `rp2350.rv1`.
- [x] Oba rdzenie raportują `XLEN=32`.
- [ ] Nie wykonano testu programu K01 na RTL Hazard3.
- [ ] Nie wgrano programu K01 na fizyczny RP2350.

## Wyniki bazowe — host AMD64

| Task | Wynik |
|---|---|
| 01 | `header=16 aligned=16 allocated=1 total=32 user=16` |
| 02 | `free=136 largest=80 count=3` |
| 03 | `offset=0 free=144 end_last=1` |
| 04 | `r1=24 r9=32 r17=40 delta=7` |
| 05 | `ok=1 allocated=120 remaining=0` |
| 06 | `allocated=48 split=128 nodes=1` |
| 07 | `order=1 count=3 total=120` |
| 08 | `count=1 size=160 merged_right=1` |
| 09 | `heap=256 adjusted=248 dynamic=1 host_trace=1` |
| 10 | `ok=1 nodes=1 free=240 min=144` |

## Braki P0

- [ ] Dodać `stem-card.yaml`.
- [ ] Obsłużyć targety:
  - [ ] `native` / `native-amd64`;
  - [ ] `hazard3-baremetal` / `hazard3-sim`;
  - [ ] `rp2350-rv` / fizyczny Hazard3.
- [ ] Naprawić `stemctl test hazard3-sim freertos heap4 10`.
  - Stan obecny: `Legacy Hazard3 card/task is unsupported`.
- [ ] Dodać asercje wyniku.
  - Stan obecny: każdy `main()` zwraca `0` niezależnie od wartości `g_*`.
- [ ] Dodać automatyczne porównanie wyników AMD64 i RV32.
- [ ] Dodać bezpieczne sprawdzanie przepełnienia rozmiaru żądania.
- [ ] Sprawdzić wyrównanie buforów używanych jako `HeapBlock`.
- [ ] Nie dereferencjonować wyniku alokacji przed sprawdzeniem `p != NULL`.

## Braki debug

- [ ] K10: dodać jawne checkpointy:
  - [ ] `INIT`;
  - [ ] `ALLOC_A`;
  - [ ] `ALLOC_B`;
  - [ ] `FREE_A`;
  - [ ] `ALLOC_C`;
  - [ ] `ALLOC_REJECTED`;
  - [ ] `FREE_B`;
  - [ ] `FREE_C`;
  - [ ] `DONE`.
- [ ] K10: zapisywać przy checkpointcie:
  - [ ] numer zdarzenia;
  - [ ] adres bloku;
  - [ ] liczbę wolnych bloków;
  - [ ] sumę wolnej pamięci;
  - [ ] minimum wolnej pamięci;
  - [ ] status `RUNNING/PASS/FAIL`.
- [ ] Simulator:
  - [ ] breakpoint na funkcji checkpointu;
  - [ ] inspekcja listy i pamięci;
  - [ ] bez obiecywania watchpointów — szybki stub obsługuje obecnie breakpointy wykonania.
- [ ] RP2350:
  - [ ] OpenOCD `target/rp2350-riscv.cfg`;
  - [ ] breakpoint `main`;
  - [ ] sprzętowy watchpoint na numerze zdarzenia/statusie;
  - [ ] porównanie adresów i wyników z symulatorem;
  - [ ] Termdebug i DAP na tym samym ELF.

## Braki materiału

- [ ] Zmniejszyć udział prozy.
- [ ] Zastąpić akapity:
  - [ ] listami kontrolnymi;
  - [ ] tabelami wartości;
  - [ ] komendami do skopiowania;
  - [ ] punktami zatrzymania GDB;
  - [ ] kryteriami zaliczenia.
- [ ] Szablon każdego taska:
  - [ ] `Cel` — maksymalnie 3 punkty;
  - [ ] `Uruchom` — komendy;
  - [ ] `Zatrzymaj` — breakpoint/watchpoint;
  - [ ] `Obserwuj` — symbole i pamięć;
  - [ ] `Oczekuj` — wartości host/RV32;
  - [ ] `Zmień` — jeden eksperyment;
  - [ ] `Zaliczenie` — mierzalna checklista.
- [ ] Przenieść pełne listingi C/ASM do dodatku.
- [ ] Pierwsze strony PDF przeznaczyć na kartę prowadzącego i przebieg lekcji.

## Kolejność wznowienia K01

1. Zamknąć wymagania w bezpośrednim poprzedniku `inf/structures`.
2. Dodać testy wyniku do K01.
3. Dodać kontrakt `stem-card.yaml`.
4. Uruchomić 10/10 tasków na Hazard3 RTL.
5. Dodać checkpointy K10.
6. Zbudować K10 dla `rp2350-rv`.
7. Wgrać i debugować K10 przez JTAG.
8. Przebudować README/PDF do formatu list-first.
9. Wykonać końcowy review techniczny i dydaktyczny.

## Bezpośredni poprzednik

- Seria: `inf`.
- Karta: `structures`.
- Repozytorium: `lab-rv32i-c-structures`.
- Przejście wymagane przed K01:
  - [ ] `struct` i `typedef`;
  - [ ] struktura samoreferencyjna;
  - [ ] pole `next`;
  - [ ] przejście po liście;
  - [ ] wstawianie elementu;
  - [ ] wartownik;
  - [ ] `sizeof`, padding i wyrównanie na AMD64/RV32;
  - [ ] niezmienniki listy;
  - [ ] obserwacja w GDB.

