Skip to content

Add sourcing note for the HR-100A balance isolation slab - #147

Open
sgbaird wants to merge 4 commits into
mainfrom
claude/issue-146-20260820-1750
Open

Add sourcing note for the HR-100A balance isolation slab#147
sgbaird wants to merge 4 commits into
mainfrom
claude/issue-146-20260820-1750

Conversation

@sgbaird

@sgbaird sgbaird commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Buy-list and sizing note for #146, following point 4(d) of the #116 environment survey.

The slab targets the ~100 mg mechanical step events only: jitter is already below the 0.1 mg display resolution and creep is internal to the balance, so neither should be expected to improve. The note sets that acceptance criterion explicitly.

Sizes against the HR-100A's 198 x 294 x 315 mm / 3.5 kg from the HR-A manual, flags the straddle-clearance problem (the doser bridge already lands on the deck around the balance, so a 50-75 mm slab under the balance alone collides with the platform), and prices four sourcing routes from free sink cutouts through a $70 12x18x3 in surface plate.

Also includes the isolator sizing table (f0 = 15.76/sqrt(delta), target 5-7 Hz), fume-hood cautions, and a commissioning checklist that reuses scripts/balance_environment_survey.py for before/after comparison.

Docs only - no code or hardware changes.

Closes #146.

Generated with Claude Code

Buy-list and sizing note for #146, following point 4(d) of the #116
environment survey. The slab targets the ~100 mg mechanical step events
only; jitter is already below the 0.1 mg display resolution and creep is
internal to the balance, so neither should be expected to improve.

Sizes against the HR-100A's 198 x 294 x 315 mm / 3.5 kg from the HR-A
manual, flags the straddle-clearance problem (the doser bridge already
lands on the deck around the balance, so a 50-75 mm slab under the
balance alone collides with the platform), and prices four sourcing
routes from free sink cutouts through a $70 12x18x3 in surface plate.

Co-authored-by: Sam Charles <185848910+swcharles@users.noreply.github.com>
@sgbaird

sgbaird commented Aug 20, 2026

Copy link
Copy Markdown
Contributor Author

@claude in addition to the granite (or marble, not sure which would be better), we also probably want the rubber underneath. We did a bunch of testing and ordered some things in context of vertical-cloud-lab/tensegrity-optimization#88 and other PRs in there (a bunch of drop tests on samples and looking at the shock response)

Based on that, which would you recommend? We got it from mcmaster. Use your github secrets with mcmaster credentials to look up the exact part and price that you need (via the Pi, to avoid getting blocked)

@claude

claude Bot commented Aug 20, 2026

Copy link
Copy Markdown

Claude finished @sgbaird's task in 16m 27s —— View job


Rubber under the granite ✅

  • Read the current sourcing note
  • Review the drop-test / shock-response work in tensegrity-optimization#88, PR #86, and drop-test-pu-configs-analysis.md
  • Look up exact McMaster parts + prices via the Pi (whole 8514K family mapped, verified 2026-08-20)
  • Recommend granite vs. marble and the rubber underlayment
  • Update docs/balance-isolation-slab-sourcing.md and push (4a38776)

Short answers

Granite, not marble — and the reason is chemical, not dynamic. At 30 kg the slab is a rigid body well below 1 kHz either way, and the stone's internal damping is negligible next to the rubber under it. What separates them is that marble is recrystallised calcite: it etches in acid vapour and is Mohs 3–4, so it scars from a dropped vial. Granite is silicate, Mohs 6–7, non-porous, and is what surface plates are made from. Buy marble only if a free remnant turns up and the hood is acid-free. (Trade names lie — vinegar on a hidden edge; fizzing means carbonate, i.e. pick the other one.)

Rubber: McMaster 8514K315, 4" × 4" × 1/2", 70 Shore OO super-cushioning polyurethane, $15.04, ships next day. Cut four ~7/8" squares from it. But check the bin first — this is the same material and thickness the drop-tower program already bought, and four 7/8" squares is 3 in², a rounding error against a 12 × 12 sheet. Offcuts make these for free.

Why that one, from your tensegrity data

The transferable result is about the material, not the arrangement:

  • Damping is the discriminator, not compliance. Felt failed by adding high-frequency spike content (raw CH5 91 % FS worn, vs 26.2 % on ¼ in PU and 6.2 % on ½ in), not by shifting the CFC-180 peak. Super-cushioning PU is the Sorbothane-class viscoelastic, tan δ ≈ 0.5 vs ≈ 0.05–0.1 for neoprene/EPDM. That matters more here than it did there: any isolator amplifies at f₀, and at tan δ ≈ 0.5 the peak is 2.2× instead of 5–10× with ring-down. A balance settling to 0.1 mg can't afford ring-down — especially under Option A, where the tapper excites f₀ from inside the isolated mass on every dose.
  • Durability is settled. 40 drops at 5.5 m/s, no bedding-in trend, input CV 1.4–1.8 %. A static 32 kg is trivial by comparison, so compression set is a non-question.
  • One hard constraint carries over: the paired test found the two sheets stacked toggled between two stiffness states drop-to-drop, from seating at the sheet-to-sheet interface, and a single sheet removed it. A bistable interface under this slab would look exactly like the ~100 mg step events we're trying to remove. One layer, cut clean, seated once — never a stack.

I did not lean on the arrangement ranking from drop-test-pu-configs-analysis.md — that was withdrawn by the Edison adversarial re-analysis (task d9092c5a, verdict "the sweep cannot decide"). Only the material behaviour survives, which is all this needs.

The part that's easy to get wrong: pads, not a sheet

The instinct is to lay a 12 × 12 sheet under the slab. That does essentially nothing — a wide, thin elastomer layer can't bulge sideways, and rubber that can't bulge can't compress. Shape factor S = loaded area ÷ free area, E_c ≈ E(1 + 2S²):

layout under the 12 × 18 slab S E_c deflection f₀
full-area ¼ in sheet ~14 ~300 MPa ~0.00005 mm ≈ rigid — no isolation at all
four 7/8 × 7/8 × ½ in pads 0.44 ~0.97 MPa ~2.1 mm ~11 Hz

Same rubber, ~40 000× difference in compliance, and the sheet is the thicker pile of it.

Pad sizing (29 kg slab + 3.5 kg balance ≈ 80 N/pad, ½ in stock, 70 OO ≈ 20–25 Shore A → E ≈ 0.7 MPa):

pad side strain δ f₀
1½" 3.7 % 0.47 mm 23 Hz too stiff
1" 12 % 1.50 mm 13 Hz conservative start
7/8" 17 % 2.1 mm 11 Hz recommended
¾" 25 % 3.1 mm 8.9 Hz best attenuation, at the strain limit
5/8" 38 % will creep

One correction to the PR as it stood: its 5–7 Hz target isn't reachable with flat sheet stock. 5 mm of deflection needs ~25 mm of stock at sane strain, and a 25 mm-tall pad narrow enough to reach that strain under 8 kg/corner is taller than it is wide, i.e. it buckles. Commercial 7 Hz tables use moulded hemispheres, not flat pads. I've corrected the doc to δ ≈ 2–3 mm / f₀ ≈ 9–11 Hz and said why. Realistic attenuation with damping: −5 dB at 20 Hz, −18 dB at 50 Hz, −25 dB at 100 Hz, resonance peak 2.2×.

E for 70 Shore OO is a ±50 % estimate, so this is a starting point — calipers on loaded vs. free pad height give δ directly, and f₀ ≈ 15.76/√δ. Under 1 mm, trim smaller; over 3 mm, cut larger. Same "tune pad area empirically" conclusion your drop-test doc reached.

McMaster prices, verified today

The 8514K3xx/8514K5xx numbers are the stocked ones. Worth flagging: 8514K63 — the number you picked in #88 — currently quotes 2–3 weeks, while 8514K521 is the identical 12 × 12 × ¼ in 70 OO sheet at the same $56.01, shipping tomorrow.

part size thick duro price ships
8514K315 4 × 4 ½" 70 OO $15.04 next day
8514K313 4 × 4 ¼" 70 OO $11.43 next day
8514K314 4 × 4 3/8" 70 OO $12.62 next day
8514K215 / 8514K115 4 × 4 ½" 50 / 40 OO $15.04 ea next day
8514K521 12 × 12 ¼" 70 OO $56.01 next day
8514K515 12 × 12 ½" 70 OO $105.60 next day
8514K518 12 × 12 1" 70 OO $194.49 next day
8514K2 sample pack 30/40/50/60/70 OO $11.01 / 5 next day
8514K63 12 × 12 ¼" 70 OO $56.01 ⚠️ 2–3 weeks

The 4 × 4 pieces are the right buy: the pads need ~3 in² and the 12 × 12 sheets cost 7× more for area that gets thrown away. If you want to hedge durometer, $45 buys 40/50/70 OO in ½ in and turns the sizing table into a measurement.

Whole rig: ~$85 (G9651 granite plate $69.95 + one 8514K315 $15.04), against $1,575 for the A&D AD-1671.

Notes on how I got the prices

Run from the Pi as you asked, so the requests came from the residential IP. I did not log in with the McMaster credentials — list prices are served unauthenticated, so the account added nothing, and McMaster's sign-in path runs through 2SV / "risky sign-in" verification that would have fired codes at a real account for no gain. If you do want account-specific pricing (contract discounts, order history), say so and I'll do it, but it'll likely need a verification code from you. Scraping was rate-limited to ~1.6 req/s and ~350 requests total, all small JSON.

Also in the commit

  • Commissioning gains a caliper check on pad deflection (the only direct confirmation the isolator is doing anything) and, for Option A, a settle-time-after-tapping re-check.
  • The stacked-paver option now notes explicitly that interleaving rubber inside the mass is a different thing from stacking isolator pads.

Docs only — no code or hardware touched.
branch claude/issue-146-20260820-1750

…slab note

Answers @sgbaird's question on PR #147: which elastomer goes under the
granite, based on the drop-test/shock-response work in
vertical-cloud-lab/tensegrity-optimization#88 and PR #86.

Recommends the same material that program converged on — McMaster
super-cushioning polyurethane, 70 Shore OO — cut from the cheap 4 x 4 in
piece (8514K315, $15.04) into four 7/8 in pads. Prices for the whole
8514K family verified 2026-08-20 and tabulated; notes that 8514K63 (the
number chosen in #88) currently quotes 2-3 weeks while the identical
8514K521 ships next day.

Key engineering points added:
- Granite over marble, decided on acid resistance and hardness, not
  dynamics.
- Pads, not a full sheet: shape-factor arithmetic shows a full-area sheet
  is ~40,000x stiffer and provides no isolation.
- Pad sizing table (1/2 in stock, 4 pads, ~80 N each) landing at 7/8 in
  square, 17% static strain, f0 ~11 Hz, with the honest note that the
  doc's earlier 5-7 Hz target is not reachable with flat sheet stock.
- Damped vs undamped transmissibility, and why capping the resonance
  peak at 2.2x is worth ~13 dB of high-frequency roll-off for a balance.
- Carries over the one hard constraint from the drop tests (stacked
  sheets toggled between two stiffness states) while flagging that the
  arrangement ranking there was withdrawn by the Edison re-analysis.
- Commissioning: measure pad deflection with calipers; re-check
  settle-time after tapping under Option A.

Docs only.

Co-authored-by: Sterling G. Baird <45469701+sgbaird@users.noreply.github.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@sgbaird

sgbaird commented Aug 20, 2026

Copy link
Copy Markdown
Contributor Author

Rubber: McMaster 8514K315, 4" × 4" × 1/2", 70 Shore OO super-cushioning polyurethane, $15.04, ships next day. Cut four ~7/8" squares from it. But check the bin first — this is the same material and thickness the drop-tower program already bought, and four 7/8" squares is 3 in², a rounding error against a 12 × 12 sheet. Offcuts make these for free.

@swcharles we might be able to use a bit of the material from the ones we already bought

Interesting analysis also about a sheet vs. corner pads. Per Claude's comment, I would have thought a sheet would be best. @claude send an edison query to spot check the reasoning above about sheet vs. corner pads

@claude

claude Bot commented Aug 20, 2026

Copy link
Copy Markdown

Claude finished @sgbaird's task in 35m 50s —— View job


Edison spot-check: sheet vs. corner pads

  • Re-read the shape-factor argument in the sourcing note
  • Draft an adversarial query — 7 claims, each phrased as "refute this"
  • Submit two tasks (paperqa3-high + data-analysis-crow-high)
  • Independently recompute the numbers myself, to judge the answer against
  • Literature task returned — success, 39 kB with citations
  • Commit query, answer and artifacts (124bc8d)
  • Analysis task still running at session end — needs a follow-up @claude to fetch

Short answer

Your instinct was better than mine. The sheet-vs-pads physics holds — small pads really are ~30,000× more compliant than a full sheet of the same rubber — but Edison's verdict is that it's the right calculation applied to the wrong problem, and it rejects the four-7/8"-pads recommendation outright.

The acceptance criterion — reducing ~100 mg permanent step offsets — is not a vibration-isolation problem in the classical sense. It is a tilt-stability and latching problem for which compliance is the enemy, not the solution.

Revised recommendation: buy the granite, set it straight on the deck, and don't cut the pads yet. Run the survey. Only add elastomer if a deck accelerometer spectrum shows the energy is above ~30 Hz — and if it is, buy bonded mounts with a published dynamic stiffness, not cut sheet stock.

Verdicts

# claim verdict changes the rec?
1 shape factor makes a sheet useless OVERSTATED no
2 bonded vs. unbonded CORRECT, wrong reason no
3 f₀ from static deflection CORRECT (the objection lands) yes
4 is compliance the right lever CORRECT (the objection lands) yes
5 rocking + horizontal modes ignored CORRECT (the objection lands) yes
6 four small pads WRONG yes
7 a step event is a latching event CORRECT yes

What actually broke

1. The arithmetic survives; the headline number was inflated. I recomputed independently before the results landed and we agree within a few percent. Two corrections the note skipped: Lindley's hardness factor k ≈ 0.85 (not 1), and the finite-bulk-modulus cap 1/E_c* = 1/E_c + 1/K, which matters at S ≈ 14 where the incompressible form is being extrapolated well past its validated range. E_c for the sheet drops 290 → ~200 MPa and 40,000× becomes ~30,000×. The sheet is still a gasket, not a spring. So on the narrow question you asked — sheet or pads — the note was right.

2. But f₀ ≈ 11 Hz was never real. f₀ = 15.76/√δ assumes dynamic stiffness = static stiffness. For a Sorbothane-class PU at tan δ ≈ 0.5 that's badly violated — dynamic/static is 2–4×, so true f₀ is 15–22 Hz, not 11. My own sweep gave the same. That single correction moves the isolator's resonance from "below the disturbance band" to inside it, which is what collapses the rest of the argument.

3. Two premises in the note are wrong, and both favour the sheet.

  • "Mass alone doesn't help against base motion." True for a rigid floor. False here — the hood deck is a compliant panel, so 29 kg of granite mass-loads it and cuts its own local response. The slab earns its keep with no rubber at all.
  • Optimising the vertical mode. Shear stiffness isn't shape-factor stiffened, so four small pads put the horizontal mode at ~5 Hz (I get 5.3, Edison 5.1) — the lowest mode in the system, sitting right in the footfall harmonics — plus a rocking mode near 9–12 Hz. For an EMFR balance tilt is the sensitive DOF, and it's the one the pads make worse. This is exactly the gap your "I'd have thought a sheet would be best" was pointing at.

4. The one that threatens the whole PR (claim 7). A ~100 mg permanent offset is 1000× the display resolution and doesn't decay — that isn't steady-state vibration transmission, which averages to zero. It's something latching: stiction in the leveling feet, a draft-shield seal shifting, a particle, a flexure reseating. And a creep-prone elastomer under a 29 kg stone is a new source of exactly that failure mode — differential creep between corners becomes slow tilt drift, and shock-induced micro-slip becomes a discrete tilt step. The proposed fix can manufacture the artifact it was bought to remove.

Where I don't fully buy Edison

Being straight about the weakest link, since it's load-bearing for claim 7: the quoted EMFR tilt sensitivity of 0.05–0.2 mg/µrad is too high by a lot — taken literally, 1 µrad would move the reading a full display count and the balance couldn't be levelled at all. Working backwards from its own conclusion, 100 mg needs 500–2000 µrad ≈ 0.03–0.11°, i.e. 125–500 µm of differential settle across the pads. That's very plausible as slow creep on a pad deflected 2.1 mm (a few % differential does it) — so the creep-drift argument stands. It's much less plausible as a single micro-slip event. Pure cosine error is ~10⁴× too small to be the mechanism either way (0.33 mrad → 0.005 mg), so the qualitative point — tilt ≫ cosine, and tilt is a credible step mechanism — survives regardless. This wants measuring, not citing. Edison also flags that Gent & Lindley, Lindley, Snowdon, Rivin, ISO 10846, the Ungar–Gordon VC curves and Sorbothane's own data were all unobtainable through its search tools, so the rubber mechanics leans on a seismic-bearing paper as proxy.

What I'd change in the doc — your call

I haven't touched docs/balance-isolation-slab-sourcing.md, since you asked me to spot-check the reasoning and this overturns the PR's headline buy rather than correcting a number. Say the word and I'll: demote the rubber from "buy this" to "conditional, pending a deck spectrum"; correct f₀ 11 Hz → 15–22 Hz dynamic; add the horizontal/rocking modes and the tilt-latching failure mode; and restructure commissioning as granite-direct first, elastomer only if it fails. The granite recommendation and the granite-over-marble call are untouched by all of this.

Cheap upside: the first experiment is now free and faster — no cutting, no bedding-in wait. And per your note to @swcharles, still don't buy rubber; if it's ever needed the answer is ~2" pads, not 7/8".

Artifacts

Committed under outputs/isolator-spotcheck/ — full answer with references, both queries, the raw verbose trajectory, and the reproducible scripts/edison_isolator_spotcheck.py.

task job id status
literature paperqa3-high 2870c8ea ✅ success, fetched + committed
analysis data-analysis-crow-high 06441e04 ⏳ still running at 28 min

The analysis task was asked to recompute everything in code, sweep E over its ±50 % band, compute rocking/horizontal modes, and do the Poisson power calculation for how many 600 s runs it takes to detect a change in a 1-per-10-min event rate — that last one matters for commissioning regardless of which way the design goes. Comment @claude fetch the isolator analysis task and I'll pull it in.
branch claude/issue-146-20260820-1750

Submits two Edison tasks (paperqa3-high + data-analysis-crow-high) that are
asked to refute, not confirm, the shape-factor argument in the isolation
slab note. The literature task returned success; its verdict overturns the
four-small-pads recommendation. The analysis task was still running at the
end of the session -- its task id is committed for a follow-up fetch.

Co-authored-by: Sterling G. Baird <45469701+sgbaird@users.noreply.github.com>
@sgbaird

sgbaird commented Aug 22, 2026

Copy link
Copy Markdown
Contributor Author

Random aside related to a comment in the other PR about "CAL", that I imagine we probably have one of those 100 gram calibration weights somewhere, I imagine this would have come with the scale itself. If not, Kevin Cole probably has some.

@sgbaird

sgbaird commented Aug 22, 2026

Copy link
Copy Markdown
Contributor Author

@claude let's go with the following as a plan: buy the granite from somewhere, this could either be local or online. I want you to use the pie to look at various local websites like home Depot and other places where we might be able to find granite. I also want you to look at online sources for buying the granite. Once we get the granted, we can try without the pads, with the pads, and potentially with the full large mat, to resolve the apparent discrepancies that are above more empirically. We can borrow all of this from tensegrity, at least temporarily, and if it's just a couple small squares for the pads then that's easy to lop off.

@claude

claude Bot commented Aug 22, 2026

Copy link
Copy Markdown

Claude finished @sgbaird's task in 29m 57s —— View job


Granite sourced, and the pads/sheet argument turned into an experiment

  • Confirm what "local" means — the Pi answers from the BYU campus block, so Provo / Orem, Utah County
  • Local sources via the Pi — fabricators, ReStore, KSL, big-box
  • Online sources via the Pi — Grizzly, Shars, Zoro, Amazon, Walmart, Harbor Freight
  • Write the buy into the doc, with the corrections it needed
  • Pre-register the four-arm comparison, with a run-length that can actually decide it
  • Ship scripts/step_event_rate.py so the comparison is decidable, not eyeballed
  • Commit and push (59e5586)

The buy

Make two phone calls before you order anything. A 3 cm sink cutout is ~483 × 838 mm → ~33 kg, which is almost exactly the target mass, one face is already polished and sealed, and fabricators mostly treat them as waste. Verified today against each business's own site:

where why this one
Habitat ReStore 340 S. Orem Blvd, Orem · 801-344-8527 Donated countertop offcuts constantly. Walk in, no phone tag.
Rock Solid Granite 1161 W 780 N, Orem · (801) 225-0812 The only one publishing a searchable remnant inventory (slabzone.com — JS-rendered, needs a browser)
Big Mountain 317 N Main, Orem · 801-225-6521 Walk-in shop on Main
Little Stone 1452 S State St, Provo Closest to campus
Cobble Creek 801-618-7699 Advertises in-house sink cutouts — i.e. generates exactly this offcut

Plus Granite Countertops Utah (801) 376-3856, Quality Granite 801-800-1244, and Accent 801-269-0701 (formal priced remnant program). The ask is one sentence: "Do you have a 3 cm granite sink cutout or remnant, roughly 12 × 18 or larger, I could buy or take off your hands?" — say it's going under a lab balance, cosmetic rejects are perfect.

Online fallback if nobody answers in 48 h: Grizzly G9651, 12 × 18 × 3, $69.95, re-verified InStock today. All four sizes still at their 2026-08-20 prices (G9649 $39.95 / G9651 $69.95 / G9653 $79.95 / G9654 $99.95).

Three corrections to what the note said

  • Harbor Freight no longer sells granite surface plates. Their own search returns "Sorry, no items found." The note listed them as the cheap local option; that's dead.
  • Grizzly's $69.95 isn't the delivered price. It's a ~79 lb shipment — budget $30–60 more, so realistically $100–130. That gap is most of the argument for phoning locally first. (I couldn't pin parcel-vs-freight per SKU: G9649's record says IsFreight: false, but the bigger three pages carry both flags across the several SKUs on them. Get the real number from the cart.)
  • Home Depot and Lowe's don't sell granite slabs — only fabricated tops and samples. What they do have same-day is concrete step stones (the $10 option in the note, still valid). Both sites blocked every request from every IP I tried, so their step-stone stock is unverified and needs a human. KSL is also dry: the only precision plate statewide is a Starrett 36 × 60 grade A in Provo at $4,000 — roughly 600 kg, two orders of magnitude past what this needs.

The four-arm comparison

Your plan is right and I've pre-registered it. Order matters for two reasons:

arm build
A0 balance on the deck as today contemporaneous baseline
A granite flat on the deck mass loading alone
C granite on the full sheet the "gasket" case
B granite on four 7/8" pads the compliance case
A′ rebuild of A, unchanged day-to-day reproducibility

C before B, because cutting the pads destroys the mat. If tensegrity has both the 1/4" and 1/2" 12 × 12 sheets, that's free — mat from the 1/4", pads from the 1/2". With one sheet, run the mat arm first and lop the pads off an edge.

A′ at the end — without it, a real 1.4× and a quiet week look identical. And A0 has to be re-measured, not looked up: reusing the old 600 s baseline assumes the room is stationary, which is the one thing we suspect is false.

C vs A is the sharp test. "A full sheet does essentially nothing" is the shape-factor argument's most falsifiable claim, and it's cheap. If C beats A by more than the CI, the compliance framing is wrong about why — the mechanism would be contact and seating (a conforming layer killing a bistable three-point rock), which is a latching story, not a transmissibility one. That discriminates better than B does, because B confounds compliance with two new modes at once.

The thing that surprised me — the old acceptance test couldn't have worked

At ~6 events/hour, a 600 s survey expects one event. The commissioning step said "run the survey before and after and compare" — one count against one count. That isn't a weak test of the step-event rate, it's no test; a slab that does nothing and a slab that works look the same. python scripts/step_event_rate.py --power:

to detect events/arm hours/arm 4 arms
10× reduction 8 1.4 6 h
4× reduction 16 2.6 10 h
2× reduction 46 7.6 31 h
1.5× reduction 117 19.4 78 h

Zero events is worth more than that implies — by the rule of three, 0 events in 2 h already rules out anything worse than 4×. So: ~2 h/arm screens (one working day, kills an arm), 24 h/arm decides (~144 events, resolves 1.4×). 24 and not 8 for a reason beyond counts — the disturbance is building activity, which swings an order of magnitude between 2 pm and 2 am, so anything shorter confounds the configuration with the hour it happened to be tested. It's unattended and read-only, so it's overnight work, not bench time. Hourly chunks, so a USB hiccup costs an hour not a day.

scripts/step_event_rate.py pools the per-arm CSVs, counts events with the same detector the survey uses, and compares with the exact conditional Poisson test — the binomial test on how the pooled count splits. Exactness isn't fussiness here: these arms will produce single-digit counts if anything works, and a normal approximation at n = 3 is wrong, not just imprecise. Verified against hand-computable cases (0-vs-10 → p = 0.001953; Clopper-Pearson for 1 of 10 → [0.0025, 0.4450], both exact) and it recovers injected rates on synthetic data.

Two cheap things worth doing while it runs, because they test the tilt-latching mechanism directly rather than by inference: record the bubble level at the start and end of each arm (if it migrates after 24 h on pads but not on bare granite, that's the creep-tilt story caught in the act), and caliper all four pads at 0 h / 1 h / 24 h in arm B — growth in the corner-to-corner spread is exactly Edison's predicted failure mode.

Two things block the run, one of them seriously

  1. scripts/balance_environment_survey.py is not in this repo. It only exists at ~/powder-doser/scripts/ on the Pi — and that directory is not a git checkout. No remote, no history, one SD card in a fume hood. The instrument for this entire experiment is one power failure from gone. I didn't commit it since it's Calibration tests with powders #116's work and may be mid-edit, but say the word and I'll pull it and balance_zero.py in.
  2. No calibration weight — each rebuild wants a 100 g class E2/F1 per manual §8-1. Your Kevin Cole note lands exactly here: this isn't a nice-to-have for the protocol, it's five recalibrations.

On method

Run from the Pi as asked; requests came from the campus IP, ~1 req/2.5 s, ~100 requests total, unauthenticated public pages only — no logins, no carts. Local business discovery I did with a search API from the runner instead, because DuckDuckGo returned 202 and Mojeek served a captcha; the Pi was used for fetching pages once I knew which ones. Raw data and the negative results (which vendors block, and how) are committed under outputs/granite-sourcing/ with a reproducible scripts/granite_sourcing_survey.py. One trap documented there for whoever runs it next: the Pi's requests has no brotli decoder, so Accept-Encoding: br gives you HTTP 200 full of binary garbage and every price regex silently finds nothing — it reads exactly like a parser bug.

Docs and analysis only — nothing touched on the Pi except reads, and no hardware changed.
branch claude/issue-146-20260820-1750

…test

The rubber recommendation and the Edison rebuttal of it are both in this
note and neither wins on paper, so buy the granite alone and settle the
rest by measurement.

Sourcing, surveyed from the Pi (campus IP -- several retailers 403
datacenter ranges):

- Eight Utah County fabricators with addresses and phone numbers taken
  from their own sites, for a 3 cm sink cutout at free-to-$50. Habitat
  ReStore Orem and Rock Solid Granite (the only one publishing a
  searchable remnant inventory) lead.
- Grizzly re-verified in stock at unchanged prices, with the shipping
  gap on a 79 lb plate called out -- delivered cost is nearer $100-130
  than $69.95, which is most of the argument for phoning locally first.
- Harbor Freight no longer carries granite surface plates at all; the
  note said otherwise. KSL has nothing suitably sized. Home Depot and
  Lowe's do not sell slabs, and both blocked verification of their
  step-stone stock, so that stays flagged as unverified.

The comparison: arms A0 (bare deck) / A (granite direct) / C (full sheet)
/ B (four pads) / A' (repeat of A), in that order because cutting pads
destroys the mat and because without A' a real 1.4x is indistinguishable
from a quiet week. C vs A is the discriminating test -- "a full sheet does
essentially nothing" is the shape-factor argument's most falsifiable
claim, and B confounds compliance with two new modes at once.

scripts/step_event_rate.py pools per-arm captures and compares them with
the exact conditional Poisson test, because these arms produce
single-digit counts where a normal approximation is not merely imprecise.
Its sizing table also retires the old commissioning step: at ~6 events/h
a 600 s survey expects one event, so running it before and after was not
a weak test of the step-event rate, it was no test. 2 h/arm screens for
4x, 24 h/arm resolves 1.4x and spans a diurnal cycle the shorter arms
would confound with configuration.

Also flags that balance_environment_survey.py -- the instrument for all
of the above -- exists only on the Pi in a directory that is not a git
checkout.

Co-authored-by: Sterling G. Baird <45469701+sgbaird@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Purchase Isolating Granite Paver

1 participant