23 lines
7.4 KiB
JSON
23 lines
7.4 KiB
JSON
{
|
||
"$schema": "../../../../tools/card-layouts/schemas/card-source.schema.json", "schema": "esc-card-source.v1",
|
||
"card": {"id": "mpabi-inf-console-bash-02-tmux", "series": "console-bash", "series_title": "Bash · Console Tools", "number": "02", "count": "08", "slug": "tmux", "title": "L02 · Tmux — sessions, windows and panes", "topic": "Serwer, sesje, okna, panele i trwałość stanu", "project": "Warsztat terminalowy", "subject": "Informatyka", "level": "Rok 1 · Console", "revision_date": "2026-07-21T00:00:00+02:00", "status": "Gotowa do wykonania", "version": "v00.01", "uuid": "2e06affe-9ecc-5813-8313-fd7b91744f3b", "author": "M. Pabiszczak", "year": "2026"},
|
||
"generated": {"tex": "doc/generated/main.tex", "html": "web/index.html", "html_css": "web/style.css", "react_app": true, "html_tree_inspector": false}, "template": "templates/karta-klasyczna.json",
|
||
"title_block": {"category": "KARTA PRACY · INFORMATYKA · CONSOLE", "standard": "ISO 7200", "prepared_by": "M. Pabiszczak", "prepared_on": "21.07.2026", "checked_by": "testy automatyczne", "approved_by": "—", "url": "http://localhost:8080", "repository_url": "https://gitea.local/edu-inf/lab-console-tmux", "revision": "1", "issued_on": "21.07.2026", "series": "CONSOLE-BASH-02", "document_type": "karta pracy", "tool": "card-layouts", "sheet": "1 / 1", "show_qr": false, "show_repository_qr": false, "height_cm": 3, "repeat_on_every_page": true, "replace_front_matter": true},
|
||
"front_page_scope": {"title": "Cel karty", "content_tex": "Uczeń tworzy izolowaną sesję tmux, organizuje okna i panele oraz dowodzi trwałości stanu między klientami.", "scope_title": "Zakres tasków", "scope_table": {"headers": ["Krok", "Numer tasku", "Najważniejsza idea", "Priorytet", "Status", "Version"], "rows": [{"chapter": "2", "task": "Task01", "idea_tex": "cykl życia sesji", "priority": "obowiązkowe", "status": "ready", "version": "v00.01"}, {"chapter": "2", "task": "Task02", "idea_tex": "okna i panele", "priority": "obowiązkowe", "status": "ready", "version": "v00.01"}, {"chapter": "2", "task": "Task03", "idea_tex": "detach/attach i trwałość", "priority": "obowiązkowe", "status": "ready", "version": "v00.01"}]}},
|
||
"learning_effects": {"CB02.EN01": {"text": "Uczeń wyjaśnia relację klient–serwer–sesja–okno–panel.", "label": "Model tmux", "bloom_level": "Analiza", "assessment_criteria": ["CB02.KW01"]}, "CB02.EK01": {"text": "Uczeń tworzy i mierzy izolowany układ tmux.", "label": "Obsługa tmux", "bloom_level": "Zastosowanie", "assessment_criteria": ["CB02.KW01"]}},
|
||
"assessment_criteria": {"CB02.KW01": {"text": "Sesja, layout dwóch okien oraz trwały stan dwóch klientów dają trzy komunikaty PASS.", "learning_effects": ["CB02.EN01", "CB02.EK01"]}},
|
||
"educational_requirements": {"CB02.WE01": {"text": "Bezpieczna organizacja pracy terminalowej w tmux.", "label": "Tmux", "learning_effects": ["CB02.EN01", "CB02.EK01"], "learning_tree": {"schema": "we-learning-tree.v1", "policy": "Testy używają osobnego socketu i nigdy nie dotykają sesji użytkownika.", "ogolne": [{"tree_id": "CB02.WE01.OG.IP.01", "effect_ref": "CB02.EN01", "display": "EN IP CB02.01", "text": "Uczeń analizuje hierarchię tmux.", "kw": [{"criterion_ref": "CB02.KW01", "display": "KW IP CB02.01", "text": "Rozróżnia serwer, klienta, sesję, okno i panel."}]}], "zawodowe": [{"tree_id": "CB02.WE01.TECH.I4.01", "effect_ref": "CB02.EK01", "display": "EK INF04 CB02.01", "text": "Uczeń automatyzuje layout terminala.", "kw": [{"criterion_ref": "CB02.KW01", "display": "KW INF04 CB02.01", "text": "Potwierdza liczby okien/paneli i trwały marker."}]}]}}},
|
||
"sections": [
|
||
{"title": "Task01 · Cykl życia sesji", "content_kind": "prose", "content_tex": "Utwórz sesję lab na osobnym sockecie, sprawdź ją przez has-session i zamknij wyłącznie testowy serwer.", "educational_requirement_refs": ["CB02.WE01"], "learning_effect_refs": ["CB02.EN01", "CB02.EK01"], "assessment_criterion_refs": ["CB02.KW01"], "area_tree_refs": ["CB02.WE01.OG.IP.01", "CB02.WE01.TECH.I4.01"], "steps": [{"id": "T01-SESSION", "title": "Zmierz jedną sesję lab na izolowanym sockecie.", "tree_refs": ["CB02.WE01.TECH.I4.01"]}], "assets": [{"path": "assets/tmux-model.png", "html_path": "assets/tmux-model.svg", "caption": "Klient łączy się z serwerem, który utrzymuje sesje, okna i panele.", "label": "fig:tmux-model", "alt": "Diagram klient, serwer, sesja, okno i panele.", "kind": "diagram", "width": 0.9}]},
|
||
{"title": "Task02 · Okna i panele", "content_kind": "prose", "content_tex": "Utwórz okna shell i editor, a shell podziel na dwa panele. Nazwy i liczności są dowodem layoutu.", "educational_requirement_refs": ["CB02.WE01"], "learning_effect_refs": ["CB02.EN01", "CB02.EK01"], "assessment_criterion_refs": ["CB02.KW01"], "area_tree_refs": ["CB02.WE01.OG.IP.01", "CB02.WE01.TECH.I4.01"], "steps": [{"id": "T02-LAYOUT", "title": "Potwierdź 2 okna i 2 panele shell.", "tree_refs": ["CB02.WE01.TECH.I4.01"]}]},
|
||
{"title": "Task03 · Detach i attach", "content_kind": "prose", "content_tex": "Niezależne procesy klienta zapisują i odczytują marker z tego samego serwera. To mierzalny odpowiednik detach/attach bez interaktywnego TTY.", "educational_requirement_refs": ["CB02.WE01"], "learning_effect_refs": ["CB02.EN01", "CB02.EK01"], "assessment_criterion_refs": ["CB02.KW01"], "area_tree_refs": ["CB02.WE01.OG.IP.01", "CB02.WE01.TECH.I4.01"], "steps": [{"id": "T03-PERSIST", "title": "Potwierdź marker ready, 2 okna i 3 panele work.", "tree_refs": ["CB02.WE01.TECH.I4.01"]}]}
|
||
],
|
||
"tasks": {"task01": {"prompt_tex": "Utwórz i sprawdź izolowaną sesję.", "criterion": "session=lab sessions=1 isolated_socket=1", "assessment_criterion_ref": "CB02.KW01"}, "task02": {"prompt_tex": "Utwórz dwa okna i podziel shell.", "criterion": "windows=2 shell_panes=2 names=editor,shell", "assessment_criterion_ref": "CB02.KW01"}, "task03": {"prompt_tex": "Potwierdź stan zachowany między klientami.", "criterion": "reattach_state=preserved windows=2 work_panes=3 marker=ready", "assessment_criterion_ref": "CB02.KW01"}},
|
||
"tasks_order": ["task01", "task02", "task03"], "mission": "Zorganizować trwały i mierzalny warsztat terminalowy tmux.", "objectives": ["Utworzysz sesję.", "Zbudujesz layout okien i paneli.", "Wyjaśnisz detach/attach."],
|
||
"agenda": [{"time": "0--20 min", "work": "Sesja i socket."}, {"time": "20--40 min", "work": "Okna i panele."}, {"time": "40--60 min", "work": "Trwałość stanu i trace."}],
|
||
"tech_stack": {"software": [{"name": "tmux", "use": "serwer terminalowy"}, {"name": "POSIX shell", "use": "izolowany test"}, {"name": "stemctl", "use": "profil native-amd64"}], "hardware": [{"name": "Brak", "use": "laboratorium kontenerowe"}]},
|
||
"container_test": {"title": "Test native-amd64", "commands": ["stemctl test native-amd64 console-bash L02 1", "stemctl test native-amd64 console-bash L02 2", "stemctl debug native-amd64 console-bash L02 3"], "pass_condition": "Trzy komunikaty PASS i trace.log."},
|
||
"safety_rules": [{"title": "Osobny socket", "body": "Każdy task używa unikatowego tmux -L."}, {"title": "Kontrolowane procesy", "body": "Trap zamyka wyłącznie serwer testowy."}],
|
||
"hardware_procedure": [{"step": "1", "action": "Utwórz sesję.", "condition": "Jedna sesja lab."}, {"step": "2", "action": "Zbuduj layout.", "condition": "Dwa okna i dwa panele."}, {"step": "3", "action": "Sprawdź trwałość.", "condition": "Marker ready odczytany przez kolejnego klienta."}], "references": []
|
||
}
|