# Workspace Ten plik opisuje tylko kontekst workspace. Szczegółowy opis CLI jest w `doc/rvctl.md`. Publiczny entrypoint launchera: ```bash ./rvctl ``` 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 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-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/stem/meta/workspace-info ``` Typowy układ: ```text ~/dev/workspace/stem ├── meta │ └── workspace-info ├── tools │ └── stem-launcher ├── tokens │ └── tokens.json └── series ``` `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 seria–organizacja oraz zduplikowane identyfikatory kart i repo. Ostrzeżenie o wspólnym `workspace_dir` jest dopuszczalne podczas migracji. Aktualizacja manifestu: ```bash ./rvctl workspace sync ``` Komendy zależne od manifestu, na przykład `series list`, `series cards list`, `series cards fetch` i `tasks list`, automatycznie klonują `workspace-info`, jeżeli lokalnej kopii jeszcze nie ma. Nie wykonują automatycznego `pull` na istniejącym repo; do odświeżania służy jawne `workspace sync`.