23 lines
7.3 KiB
JSON
23 lines
7.3 KiB
JSON
{
|
|
"$schema": "../../../../tools/card-layouts/schemas/card-source.schema.json", "schema": "esc-card-source.v1",
|
|
"card": {"id": "mpabi-inf-console-bash-06-git-branching-1", "series": "console-bash", "series_title": "Bash · Console Tools", "number": "06", "count": "08", "slug": "git-branching-1", "title": "L06 · Git Branching I — branch, switch and merge", "topic": "Referencje gałęzi, rozbieżna praca i merge commit", "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": "ee873c5e-c3c4-550f-a081-eac409df99cb", "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-git-branching-1", "revision": "1", "issued_on": "21.07.2026", "series": "CONSOLE-BASH-06", "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 gałąź, wykonuje rozbieżną pracę i scala ją jawnym merge commitem z dwoma rodzicami.", "scope_title": "Zakres tasków", "scope_table": {"headers": ["Krok", "Numer tasku", "Najważniejsza idea", "Priorytet", "Status", "Version"], "rows": [{"chapter": "6", "task": "Task01", "idea_tex": "branch i switch", "priority": "obowiązkowe", "status": "ready", "version": "v00.01"}, {"chapter": "6", "task": "Task02", "idea_tex": "rozbieżna historia", "priority": "obowiązkowe", "status": "ready", "version": "v00.01"}, {"chapter": "6", "task": "Task03", "idea_tex": "merge --no-ff", "priority": "obowiązkowe", "status": "ready", "version": "v00.01"}]}},
|
|
"learning_effects": {"CB06.EN01": {"text": "Uczeń analizuje gałąź jako referencję i wspólną bazę historii.", "label": "Graf Git", "bloom_level": "Analiza", "assessment_criteria": ["CB06.KW01"]}, "CB06.EK01": {"text": "Uczeń tworzy, przełącza i scala gałęzie.", "label": "Branching", "bloom_level": "Zastosowanie", "assessment_criteria": ["CB06.KW01"]}},
|
|
"assessment_criteria": {"CB06.KW01": {"text": "Dwie gałęzie, rozbieżność 1/1 i merge z dwoma rodzicami są potwierdzone automatycznie.", "learning_effects": ["CB06.EN01", "CB06.EK01"]}},
|
|
"educational_requirements": {"CB06.WE01": {"text": "Kontrolowane rozwijanie i scalanie historii Git.", "label": "Branch/switch/merge", "learning_effects": ["CB06.EN01", "CB06.EK01"], "learning_tree": {"schema": "we-learning-tree.v1", "policy": "Scenariusz używa zmian w osobnych plikach i jawnego merge --no-ff.", "ogolne": [{"tree_id": "CB06.WE01.OG.IP.01", "effect_ref": "CB06.EN01", "display": "EN IP CB06.01", "text": "Uczeń analizuje graf commitów.", "kw": [{"criterion_ref": "CB06.KW01", "display": "KW IP CB06.01", "text": "Wyjaśnia wspólną bazę i dwóch rodziców merge."}]}], "zawodowe": [{"tree_id": "CB06.WE01.TECH.I4.01", "effect_ref": "CB06.EK01", "display": "EK INF04 CB06.01", "text": "Uczeń scala zakończoną pracę.", "kw": [{"criterion_ref": "CB06.KW01", "display": "KW INF04 CB06.01", "text": "Wynik ma oba pliki i czysty status."}]}]}}},
|
|
"sections": [
|
|
{"title": "Task01 · Create i switch", "content_kind": "prose", "content_tex": "Utwórz feature od bieżącego commita. Gałąź jest ruchomą referencją, a switch zmienia HEAD.", "educational_requirement_refs": ["CB06.WE01"], "learning_effect_refs": ["CB06.EN01", "CB06.EK01"], "assessment_criterion_refs": ["CB06.KW01"], "area_tree_refs": ["CB06.WE01.OG.IP.01", "CB06.WE01.TECH.I4.01"], "steps": [{"id": "T01-SWITCH", "title": "Potwierdź feature,main i current=feature.", "tree_refs": ["CB06.WE01.TECH.I4.01"]}], "assets": [{"path": "assets/git-merge.png", "html_path": "assets/git-merge.svg", "caption": "Dwie gałęzie od wspólnej bazy łączą się w merge commicie.", "label": "fig:git-merge", "alt": "Graf base, feature, docs i merge.", "kind": "diagram", "width": 0.9}]},
|
|
{"title": "Task02 · Rozbieżna praca", "content_kind": "prose", "content_tex": "Dodaj niezależny commit na feature i main. Merge-base pozostaje wspólną bazą, a każda strona ma jeden commit ahead.", "educational_requirement_refs": ["CB06.WE01"], "learning_effect_refs": ["CB06.EN01", "CB06.EK01"], "assessment_criterion_refs": ["CB06.KW01"], "area_tree_refs": ["CB06.WE01.OG.IP.01", "CB06.WE01.TECH.I4.01"], "steps": [{"id": "T02-DIVERGE", "title": "Zmierz common_base i liczniki 1/1.", "tree_refs": ["CB06.WE01.OG.IP.01"]}]},
|
|
{"title": "Task03 · Merge", "content_kind": "prose", "content_tex": "Scal feature do main z --no-ff. Zmierz dwóch rodziców, cztery commity, oba pliki i czysty status.", "educational_requirement_refs": ["CB06.WE01"], "learning_effect_refs": ["CB06.EN01", "CB06.EK01"], "assessment_criterion_refs": ["CB06.KW01"], "area_tree_refs": ["CB06.WE01.OG.IP.01", "CB06.WE01.TECH.I4.01"], "steps": [{"id": "T03-MERGE", "title": "Potwierdź pełny wynik merge i trace.", "tree_refs": ["CB06.WE01.TECH.I4.01"]}]}
|
|
],
|
|
"tasks": {"task01": {"prompt_tex": "Utwórz i przełącz feature.", "criterion": "branches=feature,main current=feature shared_base=1", "assessment_criterion_ref": "CB06.KW01"}, "task02": {"prompt_tex": "Utwórz rozbieżne commity.", "criterion": "common_base=1 main_ahead=1 feature_ahead=1 divergent=1", "assessment_criterion_ref": "CB06.KW01"}, "task03": {"prompt_tex": "Scal feature do main.", "criterion": "merge_parents=2 commits=4 feature_file=1 docs_file=1 clean=1", "assessment_criterion_ref": "CB06.KW01"}},
|
|
"tasks_order": ["task01", "task02", "task03"], "mission": "Rozwinąć i scalić dwie linie historii z czytelnym grafem.", "objectives": ["Utworzysz gałąź.", "Zmierzysz rozbieżność.", "Wykonasz merge commit."],
|
|
"agenda": [{"time": "0--15 min", "work": "Branch i switch."}, {"time": "15--40 min", "work": "Rozbieżne commity."}, {"time": "40--60 min", "work": "Merge i trace."}],
|
|
"tech_stack": {"software": [{"name": "Git", "use": "branch, switch, merge"}, {"name": "POSIX shell", "use": "izolowany graf"}, {"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 L06 1", "stemctl test native-amd64 console-bash L06 2", "stemctl debug native-amd64 console-bash L06 3"], "pass_condition": "Trzy komunikaty PASS i trace.log."},
|
|
"safety_rules": [{"title": "Repo mktemp", "body": "Taski nie dotykają historii użytkownika."}, {"title": "Jawny merge", "body": "--no-ff zachowuje widoczną granicę zakończonej pracy."}],
|
|
"hardware_procedure": [{"step": "1", "action": "Utwórz feature.", "condition": "Dwie referencje przy wspólnej bazie."}, {"step": "2", "action": "Rozwiń obie gałęzie.", "condition": "Ahead 1/1."}, {"step": "3", "action": "Scal do main.", "condition": "Dwa rodzice i oba pliki."}], "references": []
|
|
}
|