From 92d83e399118689a18f4df984c5e70334689508a Mon Sep 17 00:00:00 2001 From: Ethan Hill Date: Tue, 6 Oct 2026 21:20:04 -0400 Subject: [PATCH 1/3] quiz: grow duct-static-control bank to 15 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Quiz-growth arc: the duct-static-control bank grows past the page's defaultCount (10) so the engine samples a different 10 each run. Add-only — the existing ten questions are untouched; the header gains the sampling note and a coverage sentence that names lesson sections rather than counting them. New questions, each sourced from a lesson passage the ten didn't test: - ds-loop-speed (mcq, #the-loop): the static loop answers in seconds, so it is tuned gently or it hunts. - ds-pressure-profile (tf, #the-loop): the loop pivots the trunk's pressure profile around the sensor; discharge pressure is what moves. - ds-cube-law (numeric, #reset): half speed draws about 12.5 % of design power — the reset payoff. - ds-tube-stuck-high (gotcha, #safeties): fan idling at minimum on a hot afternoon with far boxes starving is the sensing tube reading high, not the boxes or the balance. - ds-duct-breach (mcq, #safeties): a breach upstream of the sensor pegs the fan and starves one stretch of trunk at once. Correct-letter distribution a7/b0/c0/d0 -> a7/b1/c1/d1. Pa twins follow the lesson's rounding (375 / 450 / 500 Pa); no new °F figures. Co-Authored-By: Claude Fable 5.1 --- html/_data/quizzes/duct-static-control.js | 76 +++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/html/_data/quizzes/duct-static-control.js b/html/_data/quizzes/duct-static-control.js index e1aa8fcd..b1a044ac 100644 --- a/html/_data/quizzes/duct-static-control.js +++ b/html/_data/quizzes/duct-static-control.js @@ -15,6 +15,19 @@ // metric-rounding policy — except the transducer's volts-to-inches // frame and fan Hz, which stay in their IP field frames (the same // US-native posture the airflow tool takes with K and VP). +// +// 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 the fan holds static and which way the +// sign runs, the loop itself (where the sensor sits, how fast the +// loop is and why it is tuned gently, and the pressure profile it +// pivots around the sensor), reset and the cube-law money it goes +// after, static-is-not-flow with its masked restriction and the old +// fix, the safeties (the cutout, a sensing tube stuck reading high, +// a duct breach the loop reads as demand), and the who-decides-what +// synthesis. The sensing-tube and breach questions both anchor +// #safeties, the subhead that hosts those paragraphs. module.exports = [ // ── The signal ───────────────────────────────────────── @@ -57,6 +70,29 @@ module.exports = [ learnMore: { href: '/education/duct-static-control.html#the-loop', label: 'Duct Static Control — One Sensor, Two-Thirds Down the Duct' }, tags: ['forced-air', 'duct-static'] }, + { + type: 'mcq', + id: 'ds-loop-speed', + prompt: 'Compared with the zone temperature loops out at the VAV boxes, how quick is the duct-static loop — and what does that mean for its tuning?', + choices: [ + { id: 'a', text: 'Slow — duct pressure takes minutes to settle, so it can carry aggressive gain.' }, + { id: 'b', text: 'About as quick as a zone loop, so the same tuning carries straight over.' }, + { id: 'c', text: 'Fast — static answers a speed change in seconds, so it wants gentle gain.', correct: true }, + { id: 'd', text: 'Fast — so it needs high gain to keep up with thirty boxes moving at once.' } + ], + explain: 'Zone loops think in minutes: a room warms slowly and the world catches up. Duct pressure answers the fan in seconds — touch the speed reference and the sensor feels it almost immediately — and loops that quick are tuned gently or they hunt. High gain on a fast loop is how you get a fan surging up and down the trunk. The PID tuner\'s supply-fan scene is this exact loop, and it shows how little gain it wants.', + learnMore: { href: '/education/duct-static-control.html#the-loop', label: 'Duct Static Control — One Sensor, Two-Thirds Down the Duct' }, + tags: ['forced-air', 'duct-static'] + }, + { + type: 'tf', + id: 'ds-pressure-profile', + prompt: 'With a fixed static setpoint, the pressure at the fan discharge stays about the same from a design afternoon to a mild evening — it is the reading out at the sensor that moves with the load.', + answer: false, + explain: 'False — it is the other way round. The sensor\'s point is the one that never moves: the loop pivots the whole pressure profile around the number it holds. On a design afternoon the trunk is a steep hill, high at the fan and spent on friction along the run; on a mild evening it is nearly flat, so discharge pressure falls toward setpoint. That swing is exactly why a sensor at the fan discharge forces a high setpoint all day.', + learnMore: { href: '/education/duct-static-control.html#the-loop', label: 'Duct Static Control — One Sensor, Two-Thirds Down the Duct' }, + tags: ['forced-air', 'duct-static'] + }, { type: 'numeric', id: 'ds-scaling', @@ -84,6 +120,17 @@ module.exports = [ learnMore: { href: '/education/duct-static-control.html#reset', label: 'Duct Static Control — Setpoint Reset' }, tags: ['forced-air', 'duct-static', 'reset'] }, + { + type: 'numeric', + id: 'ds-cube-law', + prompt: 'Supply-fan power follows the cube of speed. With reset walking the setpoint down far enough that the fan runs at half its design speed, roughly what percentage of design power does it draw? Enter the answer in %.', + answer: 12.5, + tolerance: 0.6, + unit: '%', + explain: 'Half speed cubed: 0.5 × 0.5 × 0.5 = 0.125, so about 12.5 % — an eighth of design power, the ideal figure the affinity-laws tool computes. That cube is why reset is worth the trouble: the fan is the biggest motor on the unit, and every tenth of an inch the setpoint walks down lets it run slower for the same delivered air. A fixed setpoint captures some of that money; reset goes back for the rest.', + learnMore: { href: '/education/duct-static-control.html#reset', label: 'Duct Static Control — Setpoint Reset' }, + tags: ['forced-air', 'duct-static', 'reset'] + }, // ── Static is not flow ───────────────────────────────── { @@ -140,6 +187,35 @@ module.exports = [ learnMore: { href: '/education/duct-static-control.html#safeties', label: 'Duct Static Control — When the Loop Can\'t Save You' }, tags: ['forced-air', 'duct-static', 'safeties'] }, + { + type: 'gotcha', + id: 'ds-tube-stuck-high', + prompt: 'Hottest afternoon of the month, and the complaint calls are all coming from the end of the longest run. The front end shows this. What\'s going on?', + snippet: '
SUPPLY STATIC    1.80 in. w.c. (450 Pa) · SP 1.50 in. w.c. (375 Pa)\nSUPPLY FAN       20 Hz · its minimum speed\nFAR-END BOXES    dampers 100 % · flow well short of setpoint\nNEAR BOXES       satisfied
', + choices: [ + { id: 'a', text: 'The far boxes\' actuators or flow rings have failed — the trunk clearly has pressure to spare.' }, + { id: 'b', text: 'The static reading is the lie — the sensing tube or transducer is stuck reading high, so the fan idles.', correct: true }, + { id: 'c', text: 'The setpoint is too low for the longest run — raise it to 2.0 in. w.c. (500 Pa) and the far end recovers.' }, + { id: 'd', text: 'The far run is out of balance and needs a rebalance — static is above setpoint, so the fan is doing its part.' } + ], + explain: 'Read the fan, not the static: on the hottest afternoon of the month the fan is at its minimum, which no real building load explains — the loop is answering a number that says the duct is over-pressurized. A sensing tube pinched, plugged or kinked so it reads high is the quiet twin of the dangerous stuck-low tube: the fan idles and the far zones starve first. The far boxes are behaving exactly right, wide open and asking for more — and raising the setpoint above a reading that won\'t move sends the fan chasing it toward full speed while the real static climbs toward the cutout. Put a manometer on the tap before you touch anything else.', + learnMore: { href: '/education/duct-static-control.html#safeties', label: 'Duct Static Control — When the Loop Can\'t Save You' }, + tags: ['forced-air', 'duct-static', 'safeties'] + }, + { + type: 'mcq', + id: 'ds-duct-breach', + prompt: 'Mid-afternoon the supply fan ramps to full speed and stays there. Duct static sits below setpoint and never reaches it, and every zone past one point in the trunk loses its airflow at once. What is the likeliest cause?', + choices: [ + { id: 'a', text: 'The sensing tube is plugged and stuck reading low, so the loop chases it.' }, + { id: 'b', text: 'The setpoint is set higher than the fan can make even at full speed.' }, + { id: 'c', text: 'The VFD has been left in hand at full speed after a service call.' }, + { id: 'd', text: 'A blown flex joint or an open access door upstream of the sensor.', correct: true } + ], + explain: 'A hole in the duct upstream of the sensor is something the loop cannot tell from demand: static can\'t build, so the fan pegs at full speed holding a setpoint it can never reach, conditioning a ceiling plenum. The tell is fan speed that no longer matches the load plus a block of zones past the breach going quiet together. A tube stuck low pegs the fan too, but then the real static runs away high and the boxes pinch to hold their flow — nobody starves — and an out-of-reach setpoint starves the longest runs gradually, not one stretch of trunk at once. A VFD left in hand would drive static up, not leave it short.', + learnMore: { href: '/education/duct-static-control.html#safeties', label: 'Duct Static Control — When the Loop Can\'t Save You' }, + tags: ['forced-air', 'duct-static', 'safeties'] + }, // ── The chapter close ────────────────────────────────── { From 06815105ed306863912c0f5e6ee01f812a48a2b9 Mon Sep 17 00:00:00 2001 From: Ethan Hill Date: Tue, 6 Oct 2026 21:25:59 -0400 Subject: [PATCH 2/3] quiz: refuter fixes to the duct-static-control bank The refuter flagged ds-cube-law as a cross-bank repeat: vfds.js vfd-cube-law-calc asks the same 50 % speed -> 12.5 % power numeric with only the noun changed. Move the question to 60 % speed, a ratio no bank uses (pump-control 70 %, vfds 50 %/80 %, affinity-laws FAQ 80 %), keeping the id, learnMore (#reset) and tags. The explain now ties back to the lesson's half-speed eighth by the same cube. - answer 21.6 %, tolerance 1.0 (accepts 21-22.6, so a rounded 22 passes) Co-Authored-By: Claude Fable 5.1 --- html/_data/quizzes/duct-static-control.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/html/_data/quizzes/duct-static-control.js b/html/_data/quizzes/duct-static-control.js index b1a044ac..d385fd4d 100644 --- a/html/_data/quizzes/duct-static-control.js +++ b/html/_data/quizzes/duct-static-control.js @@ -123,11 +123,11 @@ module.exports = [ { type: 'numeric', id: 'ds-cube-law', - prompt: 'Supply-fan power follows the cube of speed. With reset walking the setpoint down far enough that the fan runs at half its design speed, roughly what percentage of design power does it draw? Enter the answer in %.', - answer: 12.5, - tolerance: 0.6, + prompt: 'Supply-fan power follows the cube of speed. With reset walking the setpoint down far enough that the fan runs at 60 % of its design speed, roughly what percentage of design power does it draw? Enter the answer in %.', + answer: 21.6, + tolerance: 1.0, unit: '%', - explain: 'Half speed cubed: 0.5 × 0.5 × 0.5 = 0.125, so about 12.5 % — an eighth of design power, the ideal figure the affinity-laws tool computes. That cube is why reset is worth the trouble: the fan is the biggest motor on the unit, and every tenth of an inch the setpoint walks down lets it run slower for the same delivered air. A fixed setpoint captures some of that money; reset goes back for the rest.', + explain: '0.6 × 0.6 × 0.6 = 0.216, so about 22 % — a little over a fifth of design power, the ideal figure the affinity-laws tool computes; the lesson\'s half-speed example lands at an eighth (≈13 %) by the same cube. That cube is why reset is worth the trouble: the fan is the biggest motor on the unit, and every tenth of an inch the setpoint walks down lets it run slower for the same delivered air. A fixed setpoint captures some of that money; reset goes back for the rest.', learnMore: { href: '/education/duct-static-control.html#reset', label: 'Duct Static Control — Setpoint Reset' }, tags: ['forced-air', 'duct-static', 'reset'] }, From e24dde22be8b789f6493894e9b49995648c660f3 Mon Sep 17 00:00:00 2001 From: Ethan Hill Date: Tue, 6 Oct 2026 21:32:06 -0400 Subject: [PATCH 3/3] quiz: refuter fixes to the duct-static-control bank MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The refuter found that ds-tube-stuck-high's front-end signature (static 1.80 over SP 1.50, fan parked at its 20 Hz minimum, far boxes wide open and short, near boxes satisfied) is painted identically by an HONEST transducer with the trunk dead-ended downstream of the sensor — a dropped fire damper or a closed volume damper. The keyed choice stays the best of the four listed, so the fix is to the framing, not the key: - prompt now asks for the first thing to suspect, not a verdict - explain's closing manometer line now says what the reading tells you either way: 1.5 at the tap vs 1.8 on the transducer means the tube or transducer is lying; agreement means the sensor is honest and the trunk is dead-ended downstream of it Ids, choices and key unchanged. Co-Authored-By: Claude Fable 5.1 --- html/_data/quizzes/duct-static-control.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/html/_data/quizzes/duct-static-control.js b/html/_data/quizzes/duct-static-control.js index d385fd4d..cce74ac9 100644 --- a/html/_data/quizzes/duct-static-control.js +++ b/html/_data/quizzes/duct-static-control.js @@ -190,7 +190,7 @@ module.exports = [ { type: 'gotcha', id: 'ds-tube-stuck-high', - prompt: 'Hottest afternoon of the month, and the complaint calls are all coming from the end of the longest run. The front end shows this. What\'s going on?', + prompt: 'Hottest afternoon of the month, and the complaint calls are all coming from the end of the longest run. The front end shows this. What\'s the first thing to suspect?', snippet: '
SUPPLY STATIC    1.80 in. w.c. (450 Pa) · SP 1.50 in. w.c. (375 Pa)\nSUPPLY FAN       20 Hz · its minimum speed\nFAR-END BOXES    dampers 100 % · flow well short of setpoint\nNEAR BOXES       satisfied
', choices: [ { id: 'a', text: 'The far boxes\' actuators or flow rings have failed — the trunk clearly has pressure to spare.' }, @@ -198,7 +198,7 @@ module.exports = [ { id: 'c', text: 'The setpoint is too low for the longest run — raise it to 2.0 in. w.c. (500 Pa) and the far end recovers.' }, { id: 'd', text: 'The far run is out of balance and needs a rebalance — static is above setpoint, so the fan is doing its part.' } ], - explain: 'Read the fan, not the static: on the hottest afternoon of the month the fan is at its minimum, which no real building load explains — the loop is answering a number that says the duct is over-pressurized. A sensing tube pinched, plugged or kinked so it reads high is the quiet twin of the dangerous stuck-low tube: the fan idles and the far zones starve first. The far boxes are behaving exactly right, wide open and asking for more — and raising the setpoint above a reading that won\'t move sends the fan chasing it toward full speed while the real static climbs toward the cutout. Put a manometer on the tap before you touch anything else.', + explain: 'Read the fan, not the static: on the hottest afternoon of the month the fan is at its minimum, which no real building load explains — the loop is answering a number that says the duct is over-pressurized. A sensing tube pinched, plugged or kinked so it reads high is the quiet twin of the dangerous stuck-low tube: the fan idles and the far zones starve first. The far boxes are behaving exactly right, wide open and asking for more — and raising the setpoint above a reading that won\'t move sends the fan chasing it toward full speed while the real static climbs toward the cutout. Put a manometer on the tap before you touch anything else — if it reads 1.5 in. w.c. (375 Pa) and the transducer says 1.8 (450 Pa), the tube or transducer is lying; if it agrees with the transducer, the sensor is honest and the trunk is dead-ended downstream of it (a dropped fire damper, a closed volume damper), which paints exactly the same picture from the front end.', learnMore: { href: '/education/duct-static-control.html#safeties', label: 'Duct Static Control — When the Loop Can\'t Save You' }, tags: ['forced-air', 'duct-static', 'safeties'] },