planner-v1 envelope: status=ok, item 2e0cb4d5-eae7-401f-a2e6-f2260abb544b, run r-202609291636-2e0cb4d5. Notes filled: diagnosis, test-plan (both upserted, no warnings). Drift pin OK: configFingerprint matched 21f59cbb...bc2c; the get response showed no traits member, so I treated traits as [] (not affirmatively seen). rulesFetched: protocol.in-phase-seat rulesVersion 4ede53bbb5fd53c9bd4bb594359e3de8718542e7b7b28bf1453baf81156d43c0; test-author rulesVersion 793a03d7c6648ed3698b1a5d7509b507d61d4f2f3e1fa08037b598e55d6893dd. Summary: root cause is src/mathx.mjs:12-16, mean() divides 0/0 for an empty array. Fix is a guard `if (xs.length === 0) throw new RangeError('mean: array is empty')`. Test plan has scenarios S1-S7, all EXISTING-SURFACE, with red-proof by reverting only the guard. No advance calls were made.
