meta: add interactive draft URL

This commit is contained in:
2026-07-20 08:36:15 +02:00
parent e35dfb5f1c
commit 1776d7bad8
+116 -35
View File
@@ -43,7 +43,8 @@
"show_repository_qr": false, "show_repository_qr": false,
"height_cm": 2.6, "height_cm": 2.6,
"repeat_on_every_page": true, "repeat_on_every_page": true,
"replace_front_matter": true "replace_front_matter": true,
"url": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/de1a2818-4c30-5760-8b31-255114f82e90"
}, },
"front_page_scope": { "front_page_scope": {
"title": "Cel karty", "title": "Cel karty",
@@ -53,8 +54,20 @@
}, },
"side_margin_tree_layout": { "side_margin_tree_layout": {
"columns": [ "columns": [
{"id": "zawodowe", "label": "TECH", "side": "left", "tree": "WE -> EK -> KW", "description": "Dowód z kodu, ELF i Hazard3."}, {
{"id": "ogolne", "label": "OG", "side": "right", "tree": "WE -> EN -> KW", "description": "Rozumowanie o własności i czasie życia."} "id": "zawodowe",
"label": "TECH",
"side": "left",
"tree": "WE -> EK -> KW",
"description": "Dowód z kodu, ELF i Hazard3."
},
{
"id": "ogolne",
"label": "OG",
"side": "right",
"tree": "WE -> EN -> KW",
"description": "Rozumowanie o własności i czasie życia."
}
] ]
}, },
"learning_effects": { "learning_effects": {
@@ -62,26 +75,36 @@
"bloom_level": "Analiza", "bloom_level": "Analiza",
"label": "Inwariant własności", "label": "Inwariant własności",
"text": "Uczeń wyjaśnia jeden-owner invariant, usunięte kopiowanie, stan moved-from i kolejność release-before-transfer.", "text": "Uczeń wyjaśnia jeden-owner invariant, usunięte kopiowanie, stan moved-from i kolejność release-before-transfer.",
"assessment_criteria": ["K03.KW01"] "assessment_criteria": [
"K03.KW01"
]
}, },
"K03.EK01": { "K03.EK01": {
"bloom_level": "Zastosowanie", "bloom_level": "Zastosowanie",
"label": "Dowód pamięci", "label": "Dowód pamięci",
"text": "Uczeń odtwarza checkpointy 17 i koreluje adresy A/B, liczniki new/delete oraz stan heap_4.", "text": "Uczeń odtwarza checkpointy 17 i koreluje adresy A/B, liczniki new/delete oraz stan heap_4.",
"assessment_criteria": ["K03.KW01"] "assessment_criteria": [
"K03.KW01"
]
} }
}, },
"assessment_criteria": { "assessment_criteria": {
"K03.KW01": { "K03.KW01": {
"text": "Program kończy się PASS; adres A przechodzi do kolejnych właścicieli, B jest zwolniony przed transferem, źródła są puste, allocations=2, frees=2, live=0 i final free equals baseline.", "text": "Program kończy się PASS; adres A przechodzi do kolejnych właścicieli, B jest zwolniony przed transferem, źródła są puste, allocations=2, frees=2, live=0 i final free equals baseline.",
"learning_effects": ["K03.EN01", "K03.EK01"] "learning_effects": [
"K03.EN01",
"K03.EK01"
]
} }
}, },
"educational_requirements": { "educational_requirements": {
"K03.WE01": { "K03.WE01": {
"text": "Zaprojektowanie i zbadanie move-only właściciela bufora nad heap_4.", "text": "Zaprojektowanie i zbadanie move-only właściciela bufora nad heap_4.",
"label": "Vector V1 i RAII", "label": "Vector V1 i RAII",
"learning_effects": ["K03.EN01", "K03.EK01"], "learning_effects": [
"K03.EN01",
"K03.EK01"
],
"learning_tree": { "learning_tree": {
"schema": "we-learning-tree.v1", "schema": "we-learning-tree.v1",
"policy": "Każda zmiana właściciela ma dowód adresu i licznika zwolnień.", "policy": "Każda zmiana właściciela ma dowód adresu i licznika zwolnień.",
@@ -139,20 +162,32 @@
"title": "V0 i inwariant jednego właściciela", "title": "V0 i inwariant jednego właściciela",
"content_kind": "prose", "content_kind": "prose",
"content_tex": "Zdiagnozuj wyciek V0 i ryzyko double free po dodaniu destruktora bez usunięcia kopiowania.", "content_tex": "Zdiagnozuj wyciek V0 i ryzyko double free po dodaniu destruktora bez usunięcia kopiowania.",
"educational_requirement_refs": ["K03.WE01"], "educational_requirement_refs": [
"learning_effect_refs": ["K03.EN01"], "K03.WE01"
"assessment_criterion_refs": ["K03.KW01"], ],
"area_tree_refs": ["K03.WE01.OG.LOCAL.OOP.OWN.01"], "learning_effect_refs": [
"K03.EN01"
],
"assessment_criterion_refs": [
"K03.KW01"
],
"area_tree_refs": [
"K03.WE01.OG.LOCAL.OOP.OWN.01"
],
"steps": [ "steps": [
{ {
"id": "S01", "id": "S01",
"title": "Nazwij właściciela, zasób i dwa błędy Vector V0.", "title": "Nazwij właściciela, zasób i dwa błędy Vector V0.",
"tree_refs": ["K03.WE01.OG.LOCAL.OOP.OWN.01"] "tree_refs": [
"K03.WE01.OG.LOCAL.OOP.OWN.01"
]
}, },
{ {
"id": "S02", "id": "S02",
"title": "Uzasadnij destruktor oraz usunięcie operacji kopiowania.", "title": "Uzasadnij destruktor oraz usunięcie operacji kopiowania.",
"tree_refs": ["K03.WE01.OG.LOCAL.OOP.OWN.01"] "tree_refs": [
"K03.WE01.OG.LOCAL.OOP.OWN.01"
]
} }
] ]
}, },
@@ -160,20 +195,32 @@
"title": "Move assignment do zajętego celu", "title": "Move assignment do zajętego celu",
"content_kind": "prose", "content_kind": "prose",
"content_tex": "Dla source->A i destination->B ułóż release, transfer pól i wyzerowanie źródła.", "content_tex": "Dla source->A i destination->B ułóż release, transfer pól i wyzerowanie źródła.",
"educational_requirement_refs": ["K03.WE01"], "educational_requirement_refs": [
"learning_effect_refs": ["K03.EN01"], "K03.WE01"
"assessment_criterion_refs": ["K03.KW01"], ],
"area_tree_refs": ["K03.WE01.OG.LOCAL.OOP.OWN.01"], "learning_effect_refs": [
"K03.EN01"
],
"assessment_criterion_refs": [
"K03.KW01"
],
"area_tree_refs": [
"K03.WE01.OG.LOCAL.OOP.OWN.01"
],
"steps": [ "steps": [
{ {
"id": "S03", "id": "S03",
"title": "Zwolnij B przed przejęciem A i wyjaśnij self-move guard.", "title": "Zwolnij B przed przejęciem A i wyjaśnij self-move guard.",
"tree_refs": ["K03.WE01.OG.LOCAL.OOP.OWN.01"] "tree_refs": [
"K03.WE01.OG.LOCAL.OOP.OWN.01"
]
}, },
{ {
"id": "S04", "id": "S04",
"title": "Wyzeruj źródło i sprawdź stan moved-from.", "title": "Wyzeruj źródło i sprawdź stan moved-from.",
"tree_refs": ["K03.WE01.OG.LOCAL.OOP.OWN.01"] "tree_refs": [
"K03.WE01.OG.LOCAL.OOP.OWN.01"
]
} }
] ]
}, },
@@ -181,25 +228,39 @@
"title": "Hazard3: checkpointy 17", "title": "Hazard3: checkpointy 17",
"content_kind": "prose", "content_kind": "prose",
"content_tex": "Śledź A i B, liczniki allocation/deallocation oraz relacje current free i minimum-ever.", "content_tex": "Śledź A i B, liczniki allocation/deallocation oraz relacje current free i minimum-ever.",
"educational_requirement_refs": ["K03.WE01"], "educational_requirement_refs": [
"learning_effect_refs": ["K03.EK01"], "K03.WE01"
"assessment_criterion_refs": ["K03.KW01"], ],
"area_tree_refs": ["K03.WE01.TECH.LOCAL.DBG.MEM.01"], "learning_effect_refs": [
"K03.EK01"
],
"assessment_criterion_refs": [
"K03.KW01"
],
"area_tree_refs": [
"K03.WE01.TECH.LOCAL.DBG.MEM.01"
],
"steps": [ "steps": [
{ {
"id": "S05", "id": "S05",
"title": "Na STOP 3 zapisz dwa różne adresy i stan heapu.", "title": "Na STOP 3 zapisz dwa różne adresy i stan heapu.",
"tree_refs": ["K03.WE01.TECH.LOCAL.DBG.MEM.01"] "tree_refs": [
"K03.WE01.TECH.LOCAL.DBG.MEM.01"
]
}, },
{ {
"id": "S06", "id": "S06",
"title": "Na STOP 4 pokaż B jako pierwszy zwolniony adres i A u celu.", "title": "Na STOP 4 pokaż B jako pierwszy zwolniony adres i A u celu.",
"tree_refs": ["K03.WE01.TECH.LOCAL.DBG.MEM.01"] "tree_refs": [
"K03.WE01.TECH.LOCAL.DBG.MEM.01"
]
}, },
{ {
"id": "S07", "id": "S07",
"title": "Na STOP 7 potwierdź 2/2/0, baseline i PASS.", "title": "Na STOP 7 potwierdź 2/2/0, baseline i PASS.",
"tree_refs": ["K03.WE01.TECH.LOCAL.DBG.MEM.01"] "tree_refs": [
"K03.WE01.TECH.LOCAL.DBG.MEM.01"
]
} }
] ]
}, },
@@ -207,15 +268,25 @@
"title": "Granica RAII", "title": "Granica RAII",
"content_kind": "prose", "content_kind": "prose",
"content_tex": "RAII wymaga normalnego zakończenia czasu życia C++; arbitralne usunięcie taska bez unwindingu nie uruchamia automatycznie destruktorów jego ramek.", "content_tex": "RAII wymaga normalnego zakończenia czasu życia C++; arbitralne usunięcie taska bez unwindingu nie uruchamia automatycznie destruktorów jego ramek.",
"educational_requirement_refs": ["K03.WE01"], "educational_requirement_refs": [
"learning_effect_refs": ["K03.EN01"], "K03.WE01"
"assessment_criterion_refs": ["K03.KW01"], ],
"area_tree_refs": ["K03.WE01.OG.LOCAL.OOP.OWN.01"], "learning_effect_refs": [
"K03.EN01"
],
"assessment_criterion_refs": [
"K03.KW01"
],
"area_tree_refs": [
"K03.WE01.OG.LOCAL.OOP.OWN.01"
],
"steps": [ "steps": [
{ {
"id": "S08", "id": "S08",
"title": "Odróżnij normalne wyjście z zakresu od wymuszonego zakończenia taska.", "title": "Odróżnij normalne wyjście z zakresu od wymuszonego zakończenia taska.",
"tree_refs": ["K03.WE01.OG.LOCAL.OOP.OWN.01"] "tree_refs": [
"K03.WE01.OG.LOCAL.OOP.OWN.01"
]
} }
] ]
} }
@@ -226,11 +297,21 @@
"uuid": "de1a2818-4c30-5760-8b31-255114f82e90", "uuid": "de1a2818-4c30-5760-8b31-255114f82e90",
"prompt_tex": "Uzupełnij bezpieczną kolejność move assignment, a następnie odtwórz checkpointy i udowodnij transfer A, zwolnienie B oraz powrót heapu do baseline.", "prompt_tex": "Uzupełnij bezpieczną kolejność move assignment, a następnie odtwórz checkpointy i udowodnij transfer A, zwolnienie B oraz powrót heapu do baseline.",
"criterion": "Copy jest zabronione; source i destination po move są puste; freed addresses mają kolejność B,A; allocations=2, frees=2, live=0 i pass=1.", "criterion": "Copy jest zabronione; source i destination po move są puste; freed addresses mają kolejność B,A; allocations=2, frees=2, live=0 i pass=1.",
"educational_requirement_refs": ["K03.WE01"], "educational_requirement_refs": [
"learning_effect_refs": ["K03.EN01", "K03.EK01"], "K03.WE01"
],
"learning_effect_refs": [
"K03.EN01",
"K03.EK01"
],
"assessment_criterion_ref": "K03.KW01", "assessment_criterion_ref": "K03.KW01",
"links": {"equations": [], "figures": []} "links": {
"equations": [],
"figures": []
}
} }
}, },
"tasks_order": ["task01"] "tasks_order": [
"task01"
]
} }