meta: add interactive draft URL

This commit is contained in:
2026-07-20 08:36:17 +02:00
parent f57f77747d
commit a49b59899d
+159 -36
View File
@@ -43,7 +43,8 @@
"show_repository_qr": false,
"height_cm": 2.6,
"repeat_on_every_page": true,
"replace_front_matter": true
"replace_front_matter": true,
"url": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/c456b505-dc5c-4894-b832-bb4c5afd0feb"
},
"front_page_scope": {
"title": "Cel karty",
@@ -53,8 +54,20 @@
},
"side_margin_tree_layout": {
"columns": [
{"id": "zawodowe", "label": "TECH", "side": "left", "tree": "WE -> EK -> KW", "description": "Dowód z heap_4, ELF i Hazard3."},
{"id": "ogolne", "label": "OG", "side": "right", "tree": "WE -> EN -> KW", "description": "Dobór polityki i interpretacja metryk."}
{
"id": "zawodowe",
"label": "TECH",
"side": "left",
"tree": "WE -> EK -> KW",
"description": "Dowód z heap_4, ELF i Hazard3."
},
{
"id": "ogolne",
"label": "OG",
"side": "right",
"tree": "WE -> EN -> KW",
"description": "Dobór polityki i interpretacja metryk."
}
]
},
"learning_effects": {
@@ -62,26 +75,36 @@
"bloom_level": "Analiza",
"label": "Polityka i metryki",
"text": "Uczeń dobiera heap_1--heap_5 oraz odróżnia current free, largest free block i minimum-ever.",
"assessment_criteria": ["K05.KW01"]
"assessment_criteria": [
"K05.KW01"
]
},
"K05.EK01": {
"bloom_level": "Zastosowanie",
"label": "Fragmentacja i most ABI",
"text": "Uczeń wykazuje komplet new/delete i odtwarza failure, koalescencję, retry oraz historyczny watermark.",
"assessment_criteria": ["K05.KW01"]
"assessment_criteria": [
"K05.KW01"
]
}
},
"assessment_criteria": {
"K05.KW01": {
"text": "Program kończy się PASS; largest < request < total; pierwsza próba zawodzi bez zwiększenia success count; po koalescencji identyczna próba działa; current wraca do baseline, a minimum-ever zachowuje historię.",
"learning_effects": ["K05.EN01", "K05.EK01"]
"learning_effects": [
"K05.EN01",
"K05.EK01"
]
}
},
"educational_requirements": {
"K05.WE01": {
"text": "Dobranie i zbadanie polityki dynamicznej pamięci FreeRTOS dla C++.",
"label": "Modele heapu i dowód fragmentacji",
"learning_effects": ["K05.EN01", "K05.EK01"],
"learning_effects": [
"K05.EN01",
"K05.EK01"
],
"learning_tree": {
"schema": "we-learning-tree.v1",
"policy": "Każdy wniosek o pojemności wskazuje total, largest i stan bloków; każdy operator ma symbol ABI.",
@@ -96,7 +119,15 @@
"tree_id": "K05.WE01.OG.LOCAL.MEM.POLICY.01",
"text": "Dobiera model i interpretuje current, largest oraz minimum-ever.",
"kw": [
{"criterion_ref": "K05.KW01", "display": "KW LOCAL MEM.POLICY.01", "source": "LOCAL", "kind": "KW", "official": "MEM.POLICY", "local": "01", "text": "Uzasadnia heap_1, heap_4 i heap_5 dla trzech scenariuszy oraz nie myli total z largest."}
{
"criterion_ref": "K05.KW01",
"display": "KW LOCAL MEM.POLICY.01",
"source": "LOCAL",
"kind": "KW",
"official": "MEM.POLICY",
"local": "01",
"text": "Uzasadnia heap_1, heap_4 i heap_5 dla trzech scenariuszy oraz nie myli total z largest."
}
]
}
],
@@ -111,7 +142,15 @@
"tree_id": "K05.WE01.TECH.LOCAL.DBG.HEAP.01",
"text": "Koreluje adresy, statystyki, nagłówki bloków i symbole new/delete.",
"kw": [
{"criterion_ref": "K05.KW01", "display": "KW LOCAL DBG.HEAP.01", "source": "LOCAL", "kind": "KW", "official": "DBG.HEAP", "local": "01", "text": "Pokazuje failure, koalescencję, retry, 3/3/0 i historyczne minimum-ever."}
{
"criterion_ref": "K05.KW01",
"display": "KW LOCAL DBG.HEAP.01",
"source": "LOCAL",
"kind": "KW",
"official": "DBG.HEAP",
"local": "01",
"text": "Pokazuje failure, koalescencję, retry, 3/3/0 i historyczne minimum-ever."
}
]
}
]
@@ -123,51 +162,125 @@
"title": "Wybór heap_1--heap_5",
"content_kind": "prose",
"content_tex": "Porównaj możliwość free, koalescencję oraz źródło/regiony pamięci. Wybierz heap dla startup-only, jednej areny z delete i dwóch rozłącznych banków RAM.",
"educational_requirement_refs": ["K05.WE01"],
"learning_effect_refs": ["K05.EN01"],
"assessment_criterion_refs": ["K05.KW01"],
"area_tree_refs": ["K05.WE01.OG.LOCAL.MEM.POLICY.01"],
"educational_requirement_refs": [
"K05.WE01"
],
"learning_effect_refs": [
"K05.EN01"
],
"assessment_criterion_refs": [
"K05.KW01"
],
"area_tree_refs": [
"K05.WE01.OG.LOCAL.MEM.POLICY.01"
],
"steps": [
{"id": "S01", "title": "Uzasadnij heap_1, heap_4 i heap_5 dla trzech wdrożeń.", "tree_refs": ["K05.WE01.OG.LOCAL.MEM.POLICY.01"]},
{"id": "S02", "title": "Wyjaśnij zależność heap_3 od libc i linkera.", "tree_refs": ["K05.WE01.OG.LOCAL.MEM.POLICY.01"]}
{
"id": "S01",
"title": "Uzasadnij heap_1, heap_4 i heap_5 dla trzech wdrożeń.",
"tree_refs": [
"K05.WE01.OG.LOCAL.MEM.POLICY.01"
]
},
{
"id": "S02",
"title": "Wyjaśnij zależność heap_3 od libc i linkera.",
"tree_refs": [
"K05.WE01.OG.LOCAL.MEM.POLICY.01"
]
}
]
},
{
"title": "Kompletny most C++",
"content_kind": "prose",
"content_tex": "Odszukaj scalar/array new oraz sized/unsized scalar/array delete. Zwykłe new jest fail-fast; raw pvPortMalloc pozostaje fallible.",
"educational_requirement_refs": ["K05.WE01"],
"learning_effect_refs": ["K05.EK01"],
"assessment_criterion_refs": ["K05.KW01"],
"area_tree_refs": ["K05.WE01.TECH.LOCAL.DBG.HEAP.01"],
"educational_requirement_refs": [
"K05.WE01"
],
"learning_effect_refs": [
"K05.EK01"
],
"assessment_criterion_refs": [
"K05.KW01"
],
"area_tree_refs": [
"K05.WE01.TECH.LOCAL.DBG.HEAP.01"
],
"steps": [
{"id": "S03", "title": "Potwierdź sześć symboli alokacji/dealokacji w ELF.", "tree_refs": ["K05.WE01.TECH.LOCAL.DBG.HEAP.01"]},
{"id": "S04", "title": "Rozdziel fail-fast new od kontrolowanego raw probe.", "tree_refs": ["K05.WE01.TECH.LOCAL.DBG.HEAP.01"]}
{
"id": "S03",
"title": "Potwierdź sześć symboli alokacji/dealokacji w ELF.",
"tree_refs": [
"K05.WE01.TECH.LOCAL.DBG.HEAP.01"
]
},
{
"id": "S04",
"title": "Rozdziel fail-fast new od kontrolowanego raw probe.",
"tree_refs": [
"K05.WE01.TECH.LOCAL.DBG.HEAP.01"
]
}
]
},
{
"title": "Fragmentacja, koalescencja i retry",
"content_kind": "prose",
"content_tex": "Zwolnij A i C wokół żywego B. Udowodnij largest < request < total oraz failure. Zwolnij B i ponów identyczne żądanie po koalescencji.",
"educational_requirement_refs": ["K05.WE01"],
"learning_effect_refs": ["K05.EK01"],
"assessment_criterion_refs": ["K05.KW01"],
"area_tree_refs": ["K05.WE01.TECH.LOCAL.DBG.HEAP.01"],
"educational_requirement_refs": [
"K05.WE01"
],
"learning_effect_refs": [
"K05.EK01"
],
"assessment_criterion_refs": [
"K05.KW01"
],
"area_tree_refs": [
"K05.WE01.TECH.LOCAL.DBG.HEAP.01"
],
"steps": [
{"id": "S05", "title": "Zapisz dwa free blocks oraz relację request między largest i total.", "tree_refs": ["K05.WE01.TECH.LOCAL.DBG.HEAP.01"]},
{"id": "S06", "title": "Pokaż jeden blok po free B i udany retry.", "tree_refs": ["K05.WE01.TECH.LOCAL.DBG.HEAP.01"]}
{
"id": "S05",
"title": "Zapisz dwa free blocks oraz relację request między largest i total.",
"tree_refs": [
"K05.WE01.TECH.LOCAL.DBG.HEAP.01"
]
},
{
"id": "S06",
"title": "Pokaż jeden blok po free B i udany retry.",
"tree_refs": [
"K05.WE01.TECH.LOCAL.DBG.HEAP.01"
]
}
]
},
{
"title": "Watermark zachowuje historię",
"content_kind": "prose",
"content_tex": "Po finalnym free current wraca do baseline, ale minimum-ever pozostaje historycznym minimum. Wylicz peak = baseline - minimum-ever.",
"educational_requirement_refs": ["K05.WE01"],
"learning_effect_refs": ["K05.EN01"],
"assessment_criterion_refs": ["K05.KW01"],
"area_tree_refs": ["K05.WE01.OG.LOCAL.MEM.POLICY.01"],
"educational_requirement_refs": [
"K05.WE01"
],
"learning_effect_refs": [
"K05.EN01"
],
"assessment_criterion_refs": [
"K05.KW01"
],
"area_tree_refs": [
"K05.WE01.OG.LOCAL.MEM.POLICY.01"
],
"steps": [
{"id": "S07", "title": "Porównaj final current z minimum-ever i wylicz peak.", "tree_refs": ["K05.WE01.OG.LOCAL.MEM.POLICY.01"]}
{
"id": "S07",
"title": "Porównaj final current z minimum-ever i wylicz peak.",
"tree_refs": [
"K05.WE01.OG.LOCAL.MEM.POLICY.01"
]
}
]
}
],
@@ -177,11 +290,21 @@
"uuid": "c456b505-dc5c-4894-b832-bb4c5afd0feb",
"prompt_tex": "Wybierz model heapu, sprawdź most ABI, a następnie odtwórz siedem checkpointów i udowodnij failure mimo wystarczającej sumy free, udany retry po koalescencji oraz zachowanie minimum-ever.",
"criterion": "Sześć symboli; largest < request < total; failure bez success increment; jeden blok po free B; retry działa; 3/3/0; current=baseline; minimum-ever<current; pass=1.",
"educational_requirement_refs": ["K05.WE01"],
"learning_effect_refs": ["K05.EN01", "K05.EK01"],
"educational_requirement_refs": [
"K05.WE01"
],
"learning_effect_refs": [
"K05.EN01",
"K05.EK01"
],
"assessment_criterion_ref": "K05.KW01",
"links": {"equations": [], "figures": []}
"links": {
"equations": [],
"figures": []
}
}
},
"tasks_order": ["task01"]
"tasks_order": [
"task01"
]
}