diff --git a/challenges/cache-pressure-easy/statement.json b/challenges/cache-pressure-easy/statement.json index fafeb82..3ed3ce5 100644 --- a/challenges/cache-pressure-easy/statement.json +++ b/challenges/cache-pressure-easy/statement.json @@ -8,16 +8,10 @@ { "kind": "figure", "label": "FIG 1", + "presentation": "immersive", "illustration": { - "id": "systems.snapshot", - "props": { - "title": "Oldest on the left · newest on the right", - "rows": [ - { "label": "After two puts", "cells": [{ "label": "A", "detail": "oldest", "tone": "warning" }, { "label": "B", "detail": "newest", "tone": "accent" }] }, - { "label": "Get A", "cells": [{ "label": "B", "detail": "oldest", "tone": "warning" }, { "label": "A", "detail": "newest", "tone": "signal" }], "note": "A hit changes order without fetching from the backing store." }, - { "label": "Put C", "cells": [{ "label": "A", "detail": "oldest", "tone": "accent" }, { "label": "C", "detail": "newest", "tone": "signal" }], "note": "B leaves because it was least recently used." } - ] - } + "id": "systems.cache-story", + "props": { "mode": "lru" } }, "caption": "One hit changes the eviction decision. This two-entry example illustrates order; real capacity counts each value's bytes plus metadata." }, diff --git a/challenges/cache-pressure-medium/statement.json b/challenges/cache-pressure-medium/statement.json index 19b6df7..a39e873 100644 --- a/challenges/cache-pressure-medium/statement.json +++ b/challenges/cache-pressure-medium/statement.json @@ -8,16 +8,10 @@ { "kind": "figure", "label": "FIG 1", + "presentation": "immersive", "illustration": { - "id": "systems.snapshot", - "props": { - "title": "What a one-time scan does to a small cache", - "rows": [ - { "label": "Warm", "cells": [{ "label": "H1", "tone": "signal" }, { "label": "H2", "tone": "signal" }, { "label": "H3", "tone": "signal" }], "note": "The hot set is reused often." }, - { "label": "Cold scan", "cells": [{ "label": "S1", "tone": "warning" }, { "label": "S2", "tone": "warning" }, { "label": "S3", "tone": "warning" }], "note": "Pure LRU fills the budget with one-hit keys." }, - { "label": "Return", "cells": [{ "label": "H1 miss", "tone": "danger" }, { "label": "H2 miss", "tone": "danger" }, { "label": "H3 miss", "tone": "danger" }], "note": "A protected hot segment would keep these requests cheap." } - ] - } + "id": "systems.cache-story", + "props": { "mode": "scan" } }, "caption": "Pure LRU mistakes recent for reusable. A one-time scan looks important long enough to evict the data that will actually return." }, diff --git a/challenges/lossy-link-easy/statement.json b/challenges/lossy-link-easy/statement.json index 5c7a648..5e517d4 100644 --- a/challenges/lossy-link-easy/statement.json +++ b/challenges/lossy-link-easy/statement.json @@ -8,20 +8,10 @@ { "kind": "figure", "label": "FIG 1", + "presentation": "immersive", "illustration": { - "id": "systems.exchange", - "props": { - "title": "A lost ACK is why duplicates must be safe", - "left": "Sender", - "right": "Receiver", - "events": [ - { "from": "left", "label": "DATA 0 · abc", "detail": "deliver abc", "tone": "signal" }, - { "from": "right", "label": "ACK 0", "detail": "waiting", "dropped": true, "tone": "danger" }, - { "from": "local", "label": "timer fires", "tone": "warning" }, - { "from": "left", "label": "DATA 0 · retry", "detail": "duplicate, no delivery", "tone": "warning" }, - { "from": "right", "label": "ACK 0 again", "detail": "advance to 1", "tone": "accent" } - ] - } + "id": "systems.lost-ack-story", + "props": {} }, "caption": "Loss or corruption leaves the sender waiting. When its timer fires, it retransmits the same packet; the receiver discards duplicates but repeats the ACK." },