feat: support one Gitea organization per series

This commit is contained in:
2026-07-19 16:40:05 +02:00
parent 4dda6de387
commit b0548f0e56
6 changed files with 388 additions and 58 deletions
+27 -20
View File
@@ -11,24 +11,30 @@ Komendy kart pracy dzielimy na trzy poziomy:
- `series cards` - operacje na kartach w ramach serii
- `series cards tasks` - operacje na zadaniach w ramach karty
`rvctl` tworzy `series_root`, jeżeli katalog jeszcze nie istnieje. Lista serii
i kart pochodzi docelowo z publicznego manifestu
`~/dev/workspace/rv/meta/workspace-info/workspace.json`. Jeżeli manifestu nie
ma, komendy zależne od serii automatycznie klonują repo
`edu-workspace/workspace-info`. Jeżeli klonowanie nie jest możliwe, narzędzie
używa starego fallbacku przez `original_series_root`.
`stemctl` tworzy `series_root`, jeżeli katalog jeszcze nie istnieje. Gdy
`workspace-info` jest dostępny, manifest jest jedynym źródłem listy serii i
kart. Przypadkowe katalogi robocze nie pojawiają się w katalogu. Fallback przez
`original_series_root` działa wyłącznie dla starego workspace bez manifestu.
Każda operacyjna seria jawnie deklaruje `source_org`. Docelowa konwencja to
`edu-<series-id>`, na przykład `freertos-c``edu-freertos-c`. Jedno repo
odpowiada jednej karcie; kolejnych wydań karty nie zapisujemy jako osobnych
repozytoriów ani trwałych branchy, tylko jako historię, tagi i wydania tego
repozytorium. Organizacja `edu` przechowuje control plane i katalog, nie setki
repozytoriów kart.
## Szybki przepływ
```bash
./rvctl tokens compare
./rvctl series list
./rvctl series use inf
./rvctl series cards list inf
./rvctl card use bss
./rvctl series cards fetch inf bss
./rvctl tasks list
./rvctl tasks switch 1
./stemctl workspace audit
./stemctl tokens compare
./stemctl series list
./stemctl series use freertos-c
./stemctl series cards list freertos-c
./stemctl card use FC02
./stemctl series cards fetch freertos-c FC02
./stemctl tasks list
./stemctl tasks switch 1
```
Dla karty `bss` właściwym repo jest `lab-rv32i-strlen-bss-data-stack`.
@@ -37,10 +43,10 @@ Dla karty `bss` właściwym repo jest `lab-rv32i-strlen-bss-data-stack`.
### `series list`
Listuje dostępne serie z manifestu `workspace-info` oraz liczbę kart już
pobranych do lokalnego workspace. Jeżeli manifestu jeszcze nie ma, komenda
pobiera go automatycznie. Jeżeli `~/dev/workspace/rv/series` nie istnieje,
komenda tworzy ten katalog.
Listuje wyłącznie operacyjne serie z manifestu `workspace-info` oraz liczbę
kart już obecnych w lokalnym workspace. Logiczna seria może wskazywać wspólny,
przejściowy katalog fizyczny przez `workspace_dir`; na przykład `freertos-c`
jest obecnie mapowane na `series/freertos`.
```bash
./rvctl series list
@@ -49,8 +55,9 @@ komenda tworzy ten katalog.
Typowy wynik:
```text
fiz 3 0
inf 3 0
fiz 3 0
inf 9 5
freertos-c 11 11
```
Kolumny oznaczają: seria, liczba kart w źródłach, liczba kart pobranych do
+17
View File
@@ -16,6 +16,23 @@ wybrany kontener
└── wewnętrzny tmux → Neovim + Termdebug/GDB + symulator lub RP2350
```
## Katalog i organizacje Gitea
`workspace-info/workspace.json` jest źródłem prawdy. Organizacja `edu` pełni
rolę control plane, a stabilne serie mają osobne organizacje o nazwie
`edu-<series-id>`. Karta jest repozytorium wewnątrz organizacji swojej serii.
```bash
stemctl workspace audit
stemctl series list
stemctl series cards list freertos-c
stemctl series cards show freertos-c FC02
```
`workspace audit` jest lokalny i deterministyczny: sprawdza kontrakt katalogu,
nie modyfikuje Gitea. Dzięki temu brak sieci nie uniemożliwia przeprowadzenia
zajęć z wcześniej zsynchronizowanego workspace.
Obiektem operacji `attach` i `detach` jest **połączenie pane z kontenerem**.
Neovim i Termdebug są zawartością sesji kontenera, a nie osobnym obiektem
podpinanym przez launcher.
+30 -6
View File
@@ -13,22 +13,34 @@ Implementacja CLI znajduje się w `rvctl.py`. Plik `workspace.json` przechowuje
lokalne ścieżki workspace, series, socketów, tokenów i adres publicznego
manifestu.
Publiczny manifest wspólnego workspace jest w repo:
Publiczny manifest wspólnego workspace jest częścią control plane w
organizacji `edu`. Katalog jest źródłem prawdy dla narzędzi i interfejsu;
lista organizacji widoczna w Gitea pozostaje widokiem administracyjnym.
Model własności:
```text
edu-workspace/workspace-info
edu
└── workspace-info control plane i katalog
edu-inf seria legacy
edu-fiz seria
edu-freertos-c seria
├── lab-rv32i-freertos-heap4 jedna karta = jedno repo
├── lab-rv32i-freertos-c-first-task
└── ...
```
Lokalna kopia manifestu znajduje się w:
```text
~/dev/workspace/rv/meta/workspace-info
~/dev/workspace/stem/meta/workspace-info
```
Typowy układ:
```text
~/dev/workspace/rv
~/dev/workspace/stem
├── meta
│ └── workspace-info
├── tools
@@ -38,8 +50,20 @@ Typowy układ:
└── series
```
`workspace-info` opisuje serie, karty, repo źródłowe, repo odpowiedzi i branche.
Nie przechowuje tokenów ani lokalnych plików roboczych ucznia.
`workspace-info` opisuje rejestr organizacji, operacyjne serie, karty, repo
źródłowe, repo odpowiedzi i branche. Każda seria musi jawnie podać
`source_org`; globalne `git.source_org` nie zastępuje tej deklaracji.
`workspace-info` nie przechowuje tokenów ani lokalnych plików roboczych ucznia.
Sprawdzenie spójności bez połączenia z Gitea:
```bash
./stemctl workspace audit
```
Audyt wykrywa brak organizacji, brak jawnego `source_org`, niespójne
przypisanie seriaorganizacja oraz zduplikowane identyfikatory kart i repo.
Ostrzeżenie o wspólnym `workspace_dir` jest dopuszczalne podczas migracji.
Aktualizacja manifestu: