From 8dad4e67b215937eb341381ecbd96e945d3d31f6 Mon Sep 17 00:00:00 2001 From: Ethan Hill Date: Tue, 6 Oct 2026 22:17:15 -0400 Subject: [PATCH 1/2] quiz: grow hydronic-loops bank to 15 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Quiz-growth arc: the hydronic-loops bank grows past defaultCount (10) so the engine samples a different 10 each run. Add-only — the existing ten questions are untouched; the header gains the metric-parenthetical note, the sampling note and a coverage sentence that names lesson sections rather than counting them. New questions, each from a part of the lesson the ten didn't test: - topology-applies-to-chilled-water (tf, #d1): direct and reverse return hold for chilled water too (lesson intro + d1's opening paragraph; the intro carries no id, so #d1). - return-layout-tradeoff (mcq, #d2): reverse return spends pipe to buy back commissioning effort; neither layout skips balancing valves. - twin-t-mixed-supply-temp (numeric, #d3): the worked example's blend, 40 GPM of 180 °F into 160 GPM of 140 °F gives 148 °F. - loads-see-mixed-temp (mcq, #d3): the loads see the mixed temperature downstream of the tees, not boiler outlet water. - injection-pump-stopped (gotcha, #d3): hot boiler plus proved boiler and system pumps does not mean heat reaches the building; the d3 widget's 0 Hz failure mode. Correct-letter distribution a0/b6/c0/d0 -> a1/b6/c1/d1. Every new temperature parenthetical classifies as an absolute conversion in metric-spans. Co-Authored-By: Claude Fable 5.1 --- html/_data/quizzes/hydronic-loops.js | 81 ++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/html/_data/quizzes/hydronic-loops.js b/html/_data/quizzes/hydronic-loops.js index 579f162a..f2c1273c 100644 --- a/html/_data/quizzes/hydronic-loops.js +++ b/html/_data/quizzes/hydronic-loops.js @@ -7,6 +7,22 @@ // kebab-case and stable across edits — they namespace the // cf_quiz_hydronic-loops_* localStorage keys. Pairs with the Hydronic // Loops lesson; learnMore hrefs deep-link its #d1 / #d2 / #d3 anchors. +// Quiz prose is painted post-load (the units walker doesn't reach it), +// so temperatures carry static metric parentheticals per the +// metric-rounding policy — results close on the displayed operands. +// +// The bank is deliberately larger than the page's defaultCount (10): +// the engine samples an overflowing bank, so each run draws a +// different subset (buildQueue() in quiz-engine.js). Coverage tracks +// the lesson's sections — why direct return self-unbalances and that +// the same picture holds for chilled water, reverse return's +// self-balancing and the pipe-for-commissioning trade it makes against +// direct return, and the primary-secondary twin-T: what flows through +// the boiler, the closely-spaced tees, the injection pump as control +// point, the worked example's flow split and mixed supply temperature, +// and the stopped-injection failure the d3 widget reveals at 0 Hz. The +// chilled-water point is stated in the lesson intro, which carries no +// id, so it deep-links #d1, whose opening paragraph repeats it. module.exports = [ // ── Direct return ───────────────────────────────────── @@ -34,6 +50,16 @@ module.exports = [ tags: ['hydronics', 'direct-return'] }, + { + type: 'tf', + id: 'topology-applies-to-chilled-water', + prompt: 'Direct return and reverse return are boiler-plant layouts — a chilled-water system\'s supply and return mains follow a different set of topology rules.', + answer: false, + explain: 'False. The lesson works the heating side, but the picture is the same for chilled water: a chiller feeds the supply main just as a boiler does, the near load still hogs flow on direct return, and reverse return still evens out the path lengths. The source adds or removes heat; the topology is only how the water gets around, and most of the lesson\'s ideas transfer as they stand.', + learnMore: { href: '/education/hydronic-loops.html#d1', label: 'Hydronic Loops — 2-pipe direct return' }, + tags: ['hydronics', 'direct-return', 'chilled-water'] + }, + // ── Reverse return ──────────────────────────────────── { type: 'mcq', @@ -59,6 +85,21 @@ module.exports = [ tags: ['hydronics', 'reverse-return'] }, + { + type: 'mcq', + id: 'return-layout-tradeoff', + prompt: 'A long row of similar loads, a tight commissioning window, and pipe cost is not the constraint. Which return layout does the lesson\'s trade-off favour?', + choices: [ + { id: 'a', text: 'Direct return — each load returns the way it came, so it self-balances.' }, + { id: 'b', text: 'Direct return — the cheaper pipe wins, and balancing valves fix the rest for free.' }, + { id: 'c', text: 'Reverse return — equal path lengths do most of the balancing up front.', correct: true }, + { id: 'd', text: 'Reverse return — it needs no balancing valves, so commissioning is skipped.' } + ], + explain: 'Reverse return trades pipe and labour for commissioning effort: the doubled-back return makes every load\'s total path about equal, so flow splits close to evenly and the balancing valves only trim. Direct return is cheaper to pipe but self-unbalances, so every load\'s valve has to be set by hand. Neither layout gets out of fitting balancing valves.', + learnMore: { href: '/education/hydronic-loops.html#d2', label: 'Hydronic Loops — 2-pipe reverse return' }, + tags: ['hydronics', 'reverse-return', 'direct-return', 'balancing'] + }, + // ── Primary-secondary / twin-T ──────────────────────── { type: 'mcq', @@ -123,6 +164,46 @@ module.exports = [ learnMore: { href: '/education/hydronic-loops.html#d3', label: 'Hydronic Loops — Primary-secondary twin-T' }, tags: ['hydronics', 'primary-secondary'] }, + { + type: 'numeric', + id: 'twin-t-mixed-supply-temp', + prompt: 'In a twin-T plant the injection pump moves 40 GPM (2.5 L/s) of 180 °F (82.2 °C) primary water into a system loop moving 200 GPM (12.6 L/s). The other 160 GPM (10.1 L/s) is system return at 140 °F (60.0 °C). What supply temperature reaches the loads, in °F?', + answer: 148, + tolerance: 1, + unit: '°F', + explain: 'Mass-balance the blend: (40 × 180 + 160 × 140) ÷ 200 = (7,200 + 22,400) ÷ 200, which gives a supply of 148 °F (64.4 °C). In SI the same blend is (2.5 × 82.2 + 10.1 × 60.0) ÷ 12.6 ≈ 64.4. Speed the injection pump up and more primary water joins the blend, so the supply climbs — which is why the injection pump is the control point.', + learnMore: { href: '/education/hydronic-loops.html#d3', label: 'Hydronic Loops — Primary-secondary twin-T' }, + tags: ['hydronics', 'primary-secondary', 'injection'] + }, + { + type: 'mcq', + id: 'loads-see-mixed-temp', + prompt: 'In a twin-T system, what water actually reaches the loads?', + choices: [ + { id: 'a', text: 'Boiler outlet water, piped straight to the loads by the injection pump.' }, + { id: 'b', text: 'Primary return water, after the boiler pump recirculates it once.' }, + { id: 'c', text: 'System return water — the common pipe only adds heat on the next pass.' }, + { id: 'd', text: 'A blend of injected primary water and cooler system return.', correct: true } + ], + explain: 'The loads see the mixed temperature. Injected primary water joins the system loop at the tees and blends with cooler system return before it reaches a single load — in the lesson\'s worked example, 180 °F (82.2 °C) primary and 140 °F (60.0 °C) return blend to a 148 °F (64.4 °C) supply. More injection puts more hot water in the blend, which is how the injection pump sets supply temperature.', + learnMore: { href: '/education/hydronic-loops.html#d3', label: 'Hydronic Loops — Primary-secondary twin-T' }, + tags: ['hydronics', 'primary-secondary', 'injection'] + }, + { + type: 'gotcha', + id: 'injection-pump-stopped', + prompt: 'No-heat call on a twin-T plant. The boiler is hot and both the boiler pump and the system pump are proved running, so the tech decides the plant is fine and heads out to walk the zones. The front end shows the readings below. Where is the problem?', + snippet: '
BOILER PUMP      ON (proved)\nSYSTEM PUMP      ON (proved)\nINJECTION PUMP   0 Hz\nPRIMARY LOOP     196 °F (91.1 °C), climbing\nSYSTEM SUPPLY    140 °F (60.0 °C)\nSYSTEM RETURN    140 °F (60.0 °C)
', + choices: [ + { id: 'a', text: 'The plant — the stopped injection pump moves no boiler water into the system.', correct: true }, + { id: 'b', text: 'The zones — the boiler is hot and the system pump is proved, so heat is out there.' }, + { id: 'c', text: 'The boiler — its setpoint must go up to push more heat across the tees.' }, + { id: 'd', text: 'The system pump — speed it up so it pulls more water through the boiler.' } + ], + explain: 'A hot boiler only proves the primary loop is fine. In a twin-T the injection pump is the only way heat crosses from the primary into the system loop, so with it at 0 Hz the system pump just circulates return water past the loads (supply reads the same as return), and the boiler\'s heat has nowhere to go, so the primary climbs toward the high limit. Check the injection pump\'s enable and speed command before walking a single zone.', + learnMore: { href: '/education/hydronic-loops.html#d3', label: 'Hydronic Loops — Primary-secondary twin-T' }, + tags: ['hydronics', 'primary-secondary', 'injection'] + }, { type: 'mcq', id: 'reverse-return-still-trim', From 0d6a032bc845672359093e750d5d15e3314b34b9 Mon Sep 17 00:00:00 2001 From: Ethan Hill Date: Tue, 6 Oct 2026 22:28:20 -0400 Subject: [PATCH 2/2] quiz: refuter fixes to the hydronic-loops bank MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 'loads-see-mixed-temp' explain stated the worked blend's result, 148 °F (64.4 °C), which is the keyed answer of the sibling numeric 'twin-t-mixed-supply-temp'. The engine samples and shuffles, so a run that served the mcq first handed the reader the number before asking for it. The explain now names the inputs and the flow-weighted rule and leaves the result to the numeric. Co-Authored-By: Claude Fable 5.1 --- html/_data/quizzes/hydronic-loops.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/_data/quizzes/hydronic-loops.js b/html/_data/quizzes/hydronic-loops.js index f2c1273c..4c60c79a 100644 --- a/html/_data/quizzes/hydronic-loops.js +++ b/html/_data/quizzes/hydronic-loops.js @@ -185,7 +185,7 @@ module.exports = [ { id: 'c', text: 'System return water — the common pipe only adds heat on the next pass.' }, { id: 'd', text: 'A blend of injected primary water and cooler system return.', correct: true } ], - explain: 'The loads see the mixed temperature. Injected primary water joins the system loop at the tees and blends with cooler system return before it reaches a single load — in the lesson\'s worked example, 180 °F (82.2 °C) primary and 140 °F (60.0 °C) return blend to a 148 °F (64.4 °C) supply. More injection puts more hot water in the blend, which is how the injection pump sets supply temperature.', + explain: 'The loads see the mixed temperature. Injected primary water joins the system loop at the tees and blends with cooler system return before it reaches a single load — in the lesson\'s worked example, 40 GPM of 180 °F (82.2 °C) primary meets 160 GPM of 140 °F (60.0 °C) return at the tees, and the loads get the flow-weighted average of the two, not either one. More injection puts more hot water in the blend, which is how the injection pump sets supply temperature.', learnMore: { href: '/education/hydronic-loops.html#d3', label: 'Hydronic Loops — Primary-secondary twin-T' }, tags: ['hydronics', 'primary-secondary', 'injection'] },