Files
stem-launcher/README.md
T
2026-07-14 18:08:40 +02:00

141 lines
4.1 KiB
Markdown

# STEM Launcher
`stemctl` jest hostowym wejściem do kart pracy, Git i trzech źródłowo
budowanych kontenerów STEM. Zdalne repo nosi kanoniczną nazwę
`edu-tools/stem-launcher`; Gitea przekierowuje historyczny URL `rv-launcher`,
a `rvctl` pozostaje cichym wrapperem zgodności.
Launcher nie pobiera i nie publikuje gotowych obrazów środowiska. Klonuje repo
narzędzi zawierające `Dockerfile` i `docker-compose.yml`, a brakujący profil
buduje lokalnie rootless Podmanem. Tag `localhost/stem/...:local` jest tylko
lokalnym wpisem cache runtime.
## Model
| Profil | Targety | Zastosowanie |
| --- | --- | --- |
| `native-amd64` | `native` | C/C++, golden tests, ASan/UBSan, GDB |
| `hazard3-sim` | `hazard3-baremetal`; `hazard3-freertos` po BSP timer/IRQ | RTL Hazard3/Verilator bez płytki |
| `rp2350` | `rp2350-rv`, `rp2350-arm` | Pico 2/2 W, FreeRTOS, OpenOCD/picotool |
W każdym profilu interfejs pozostaje taki sam: tmux z prefixem `Ctrl-s`,
Neovim, Termdebug, nvim-dap oraz MCP tmuxa i Neovima. Kod karty, wyniki i
artefakty są bind-mountem na hoście. Kontenery nie dostają kluczy SSH, tokenów,
socketu Podmana/Dockera ani całego `/dev`.
## Szybki start
```bash
./stemctl workspace sync
./stemctl series list
./stemctl series cards fetch inf bss
./stemctl test native-amd64 inf bss 1
./stemctl test hazard3-sim inf bss 1
./stemctl debug hazard3-sim inf bss 1
./stemctl probe list
./stemctl deploy rp2350 inf bss 1 \
--target rp2350-rv --device /dev/bus/usb/001/006
```
Pierwsze wywołanie danego profilu może potrwać, ponieważ buduje go ze
źródłowego Dockerfile. Kolejne korzystają z lokalnych warstw cache.
Wymuszenie samego przygotowania środowiska:
```bash
./stemctl env sync
./stemctl env build native-amd64
./stemctl env build hazard3-sim
./stemctl env build rp2350
```
`env sync` klonuje lub aktualizuje
`edu-tools/rv32i-hazard3-student-env`. Repo środowiska zawiera źródłowy
Dockerfile i pliki Compose.
## Workspace
Domyślny układ:
```text
~/dev/workspace/stem/
├── meta/workspace-info/
├── series/<seria>/<karta>/
├── tools/
│ ├── stem-launcher/
│ └── rv32i-hazard3-student-env/
└── tokens/tokens.json
```
Jeżeli istnieje tylko starszy `~/dev/workspace/rv`, launcher wykrywa go bez
niszczenia danych. Jawna migracja:
```bash
./stemctl workspace migrate
./stemctl workspace doctor
```
## Akcje i tożsamość instancji
Jedna logiczna instancja zachowuje nazwę między `build`, `test`, `run`,
`debug` i `attach`. Bieżący ID kontenera wchodzi natomiast do krótkiej ścieżki
socketu:
```text
$XDG_RUNTIME_DIR/stem/<thread12>/<instance12>/<container12>/t.sock
$XDG_RUNTIME_DIR/stem/<thread12>/<instance12>/<container12>/n.sock
```
Resolver wykonuje `podman inspect` przed połączeniem i odrzuca osierocony
socket. Pozwala to jednemu Codexowi obsługiwać kilka kontenerów bez kolizji.
Stabilne wejścia MCP wymagają jawnej instancji i uruchamiają serwer znajdujący
się w wybranym kontenerze:
```bash
./stemctl mcp tmux hazard3-sim-inf-bss-t1
./stemctl mcp nvim hazard3-sim-inf-bss-t1
```
Oddzielne wpisy klienta MCP mogą wskazywać inne nazwy instancji, więc jeden
Codex obsługuje kilka kontenerów bez globalnego „ostatniego socketu”.
## Komputer zdalny
Na komputer ucznia wchodzimy wyłącznie SSH z parą kluczy. Launcher, Git,
rootless Podman i sockety działają na tym komputerze:
```bash
ssh uczen-lab
cd ~/dev/workspace/stem/tools/stem-launcher
./stemctl status hazard3-sim --instance lekcja-1
./stemctl debug hazard3-sim inf bss 1 --instance lekcja-1
```
Nie kopiujemy prywatnego klucza do kontenera. Jeżeli potrzebny jest zdalny
GDB/MCP, używamy jawnego tunelu SSH albo wykonujemy klienta po stronie zdalnej.
## Zgodność
Aliasy nadal działają:
```text
host -> native-amd64
rv32i -> hazard3-sim
rvctl -> stemctl
RV_* -> fallback dla STEM_*
```
Nowe materiały powinny używać nazw kanonicznych.
## Dokumentacja
- [plan architektury](doc/architecture-plan.md)
- [kontenery i interfejs](doc/containers.md)
- [migracja nazw i workspace](doc/migration-stem-launcher.md)
- [serie i karty](doc/series.md)
- [tokeny Gitea](doc/tokens.md)
- [przegląd Claude](doc/review-claude-2026-07-14.md)