Lane B S16: adopt C's gardenfly porosity hunk byte-identical — convergent, uncontested

Both lanes added the identical param (same name, same 0.30 default, one-line
rig change) the same day. C's copy taken verbatim so integration merges clean;
my default-unmoved + membrane-heavier asserts in gardenfly.selftest.js stand
and cover both copies.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
type-two 2026-07-20 20:42:51 +10:00
parent 458e9a5412
commit 7a2024c2f9

View File

@ -89,14 +89,14 @@ export function hardwareByName(name) {
* @param {Array} [o.ids] 4 anchor ids; null/omitted = bare bed (the control)
* @param {Array|object} [o.hw] hardware per pick (aligned with ids), or one tier for all 4
* @param {number} [o.tension]
* @param {number} [o.porosity] fabric flown. DEFAULT 0.30 (shade cloth the
* fabric a competent player flies, same as sweep.js,
* and every pinned number to date was measured on
* it); pass 0 for membrane. SPRINT16: the F key is
* live and storm_06's whole bet is membrane-vs-
* cloth, so the audit engine must be able to fly
* both C's gate-3.1 pin and B's membrane-balance
* tables ride this parameter.
* @param {number} [o.porosity] fabric: 0.30 = shade cloth (the default every
* audit number to date was flown on unchanged),
* 0 = membrane. SPRINT16 gate 3.1 measures the
* fabric bet through THIS chain, same driver as
* every other garden number, so cloth-vs-membrane
* differ by exactly one variable. [Lane C addition,
* THREADS 2026-07-20 B: contest at integration if
* you want a different door.]
* @returns {{ hp, state, byHail, byRain, cornersLost, peaks, marginal, cost }}
*/
export function flyGarden({ anchors, bed, stormDef, siteDef = null, use = null, ids = null, hw = null, tension = 1.0, porosity = 0.30 }) {
@ -107,6 +107,8 @@ export function flyGarden({ anchors, bed, stormDef, siteDef = null, use = null,
if (ids) {
const hwArr = Array.isArray(hw) ? hw : Array(4).fill(hw ?? hardwareByName('rated shackle'));
cost = hwArr.reduce((s, h) => s + (h.cost || 0), 0);
// shade cloth (porosity 0.30) unless the caller is measuring the fabric
// bet — same default as sweep.js, so nothing pre-SPRINT16 moves.
rig = new SailRig({ anchors, gridN: 10, porosity }).attach(ids, hwArr, tension);
// D's skipped-attach trap: a rig without its shadow mesh scores as a bare
// bed and the number LOOKS plausible. Refuse to fly it.