Lane B S16: ponding fabric-blindness RULED a known simplification — the comments stop lying
C's gate-3 finding, answered in the file it names: _applyPonding never reads porosity, so cloth and membrane pond identically while setFabric's comment and the cloth blurb promised shedding. Ruled, not silently fixed: every pinned cloth number (backyard separation, the section-7 gates, C's storm_06 pins, the S15 zero-delta lattice) was measured under fabric-blind ponding, and a pond- physics change mid-TEETH moves them all against the one-variable law. The fix (porosity-scaled intake + through-weave leak) wants its own gate with a full gauntlet re-measure; C's soaker is its test case. setFabric's comment carries the ruling, _applyPonding carries the warning, the cloth blurb drops 'sheds water' (a player-facing claim the sim doesn't cash). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
7a2024c2f9
commit
f7a22eabb8
@ -46,7 +46,11 @@ export const DEFAULT_TENSION = 1.0;
|
||||
* weight, membrane earns a price and this comment is the place to start.
|
||||
*/
|
||||
export const FABRIC = [
|
||||
{ id: 'cloth', name: 'shade cloth', porosity: 0.30, cost: 0, blurb: 'wind blows through — half the load, sheds water, leaks the finest hail' },
|
||||
// Blurb honesty (SPRINT16): "sheds water" deleted — C measured that ponding
|
||||
// is fabric-blind (_applyPonding never reads porosity; both cloths pond
|
||||
// identically), and a player-facing claim the sim doesn't cash is the worst
|
||||
// kind. Ruled a known simplification in sail.js setFabric's comment.
|
||||
{ id: 'cloth', name: 'shade cloth', porosity: 0.30, cost: 0, blurb: 'wind blows through — half the load, leaks the finest hail' },
|
||||
{ id: 'membrane', name: 'waterproof membrane', porosity: 0, cost: 0, blurb: 'stops rain and every stone — full wind load, and it ponds' },
|
||||
];
|
||||
export const DEFAULT_FABRIC = FABRIC[0];
|
||||
|
||||
@ -529,6 +529,11 @@ export class SailRig {
|
||||
/**
|
||||
* Rain lands, runs downhill, and pools where it can't get out. Called after
|
||||
* the wind pass (which fills _nodeFlat / _nodeArea).
|
||||
*
|
||||
* ⚠ FABRIC-BLIND, on purpose and on the record (SPRINT16, C's finding):
|
||||
* nothing below reads `this.porosity`, so an open weave ponds exactly like a
|
||||
* membrane. Ruled a known simplification — see setFabric's comment for the
|
||||
* ruling and the re-measure bill a real through-weave leak would incur.
|
||||
* @param {number} mmPerHour wind.rainMmPerHour(t) — REAL-world rate, Lane C's data
|
||||
*/
|
||||
_applyPonding(mmPerHour, dt) {
|
||||
@ -1105,10 +1110,22 @@ export class SailRig {
|
||||
}
|
||||
|
||||
/**
|
||||
* What the sail is made of. Porosity scales the wind pressure term and, since
|
||||
* rain lands on the horizontal projection of a face, an open weave sheds the
|
||||
* water it can't hold — so a porous cloth also ponds far less. Set BEFORE
|
||||
* attach(); RiggingSession.commit() does that.
|
||||
* What the sail is made of. Porosity scales the wind pressure term — and, as
|
||||
* of SPRINT16, that is ALL it scales. The previous version of this comment
|
||||
* claimed an open weave "sheds the water it can't hold — so a porous cloth
|
||||
* also ponds far less", and C's gate-3 measurement caught the cheque the sim
|
||||
* doesn't cash: _applyPonding never reads porosity, so cloth and membrane
|
||||
* pond IDENTICALLY (the $75 soaker ring's q2 gap, 3.24 vs 3.32 kN, is wind
|
||||
* term only). RULED a known simplification rather than silently fixed
|
||||
* ([B] THREADS 2026-07-20): every pinned cloth number in the repo — the
|
||||
* backyard separation block, the §7 gates, C's storm_06 pins, the S15
|
||||
* zero-delta lattice — was measured under fabric-blind ponding, and a pond-
|
||||
* physics change mid-TEETH would move all of them against the sprint's own
|
||||
* one-variable law. The fix (porosity-scaled intake + through-weave leak)
|
||||
* is real, wants its own gate with a full gauntlet re-measure, and C's
|
||||
* soaker is its ready-made test case; rigging.js's membrane-pricing comment
|
||||
* is the same conversation. Set BEFORE attach(); RiggingSession.commit()
|
||||
* does that.
|
||||
* @param {{porosity:number}|number} f a FABRIC entry or a raw porosity
|
||||
*/
|
||||
setFabric(f) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user