Drogheda/06-Testing-Validation/2026-09-17_Drogheda_HALT-Rig_Thermal-Vibration-Impact_v1.1.md

25 KiB
Raw Permalink Blame History

tags project author date status version supersedes
project-drogheda
testing
halt
environmental
hbox
rig
Project Drogheda Helgen CTO 2026-09-17 APPROVED FOR BUILD 1.1 2026-09-17_Drogheda_HALT-Rig_Thermal-Vibration-Impact_v1.0.md

DIY Environmental Test Rig — Thermal + Vibration + Impact for HBOX

!!! warning "Designators from before 22-Oct (T43)" This document keeps the designators the board had on its date. Since 22-Oct (T43) the V5.6, V5.7 and v6 carry new ones, and several old names now belong to another part: on the v6, U6 is now the A7670SA modem (was U19) and the LTC4040 is U17 (was U6). To read it against today's board, use the old → new table (in Spanish); parts already gone by 22-Oct are not in it.

🔒 Decisions locked (Leo, 17-Sep)

# Decision Consequence
D1 Chamber designed for 75 °C, campaigns run at 60 °C 75 mm rockwool (not 50), 900 W heaters (not 600), 100 °C cutout (not 85), silicone-insulated internal wiring throughout
D2 Full vibration drive: motovibrador + VFD 3-ph 0.18–0.25 kW with adjustable counterweights, 0.75 kW VFD 1-ph→3-ph. Banded sweeps are repeatable run-to-run
D3 Shop time is available Build starts now, in parallel with the field-log firmware. 4-week plan in §9
D4 Architecture changed from v1.0 — see §3 D1 forced it. The hot box is now fixed; a light fixture moves inside it

⚠ What changed from v1.0, and why it matters

v1.0 had the whole hot box riding on the shaker. Running the 75 mm insulation required by D1 through that geometry gives:

rockwool shell (0.55³ − 0.40³ = 102 L @ 100 kg/m³)   10.2 kg
3 mm alu liner, 0.4 m cube                            7.8 kg
12 mm alu platen 400×400                              5.2 kg
outer skin                                            8.5 kg
2 DUTs + heaters + fixture                            8.0 kg
                                          TOTAL      39.7 kg   ← was 16 kg

40 kg of moving mass breaks the mechanical stage. The shock pads would need 3.24 MN/m (810 kN/m each across four), and the eccentric would need ~2.5× the counterweight to reach the same g. We would be spending the entire vibration budget shaking insulation.

The fix — decouple. Hot box fixed and heavy; a light aluminium fixture moves inside it, driven from below by a rod through a silicone bellows in the chamber floor. The motovibrador, the VFD and every bearing stay outside in cool air, which is where they belong anyway.

              new moving mass
   15 mm alu fixture plate 300×300     3.6 kg
   20 mm steel drive rod, 350 mm       0.9 kg
   2 HBOX DUTs + brackets + accel      5.8 kg
                         TOTAL        10.3 kg   ← better than v1.0's 16 kg

Every mechanical number in §5 and §6 is smaller and cheaper as a result. This change makes the rig more capable, not less. It also removes the v1.0 problems of mains heaters and a PID on a shaking platform.


1. What we are actually trying to catch

Unchanged from v1.0. Summary: most of our known HBOX failures are thermal, not mechanical (LTC4040 hot-pause at ≈ +42 °C with RNTB = 10 k; the 10-Ago modem boot-loop; the June nested-cabinet heat trap). Vibration and impact are insurance for the 250-unit rollout, where a 1 % mechanical failure rate is two or three truck rolls to Veracruz.

Consequence for the build order: the chamber is useful on day one and is built first. The mechanical stage follows in week 2–3.


2. Step zero: measure the crane, don't guess it

Still the highest-value action in this document, and it costs nothing.

EinarBoard v6 carries U26 = SC7A20TR (LIS3DH-compatible, I²C 0x18, INT1 → PB9). The $PHLG vibration fields are already an open firmware item in the v6 brief. Finish that item, flash one unit, mount it on a live crane at ICAVE for 5–7 working days, log raw XYZ at 400 Hz ODR in bursts (10 s every 5 min, plus a triggered burst on INT1 over threshold).

That gives us the real PSD, the real shock spectrum, the real event rate per shift, and one defensible sentence for the client report:

"The rig reproduces the 95th-percentile measured field environment at ICAVE, with an acceleration factor of N."

That is worth more to Hutchison than "we ran IEC 60068-2-6."

Reference severities, for calibration of expectations only:

  • IEC 60068-2-6 (Fc, sine sweep) — generic industrial: a constant-displacement leg then a constant-acceleration leg, 1 oct/min. Toradex, e.g., runs 10–55 Hz @ 0.54 mm and 10–300 Hz @ 39 m·s⁻².
  • IEC 61373 Cat 1 Class B — railway, equipment in a case on the car body. Closest analogue in spirit: low-level random 5–150 Hz + 5 h/axis long-life.
  • IEC 60068-2-27 (Ea, shock) — half-sine 15 g/11 ms, 30 g/18 ms, 30 g/11 ms, 50 g/20 ms; 200–1000 shocks per direction, 3 axes.

Fallback if the field log slips: build to 5–80 Hz, peaks to 2 g, plus 15 g / 11 ms half-sine. Those are the numbers sized below.


3. Architecture (revised — D4)

   ┌──────────────────────────────────────────────┐
   │ FIXED HOT BOX — 400×400×400 useful           │
   │ 75 mm rockwool · 3 mm alu liner · 900 W PTC  │
   │                                              │
   │      ┌──────────┐      ┌──────────┐          │
   │      │  HBOX A  │      │  HBOX B  │          │  DUTs on the SAME
   │      └────┬─────┘      └────┬─────┘          │  bracket the crane uses
   │     ╔═════╧═════════════════╧═════╗          │
   │     ║ 15 mm alu FIXTURE 300×300   ║ ← ADXL355│  MOVING: 10.3 kg
   │     ╚═══════════╤═════════════════╝          │
   │   [spring]      │       [spring]             │  4× 2.5 N/mm, fn ≈ 5 Hz
   │═════════════════╪══════════════════════════════│ chamber floor
   │                 ▓ ← silicone bellows, 50 mm bore
   └─────────────────╪────────────────────────────┘
                     │ 20 mm drive rod
              ┌──────┴──────┐
              │ ECCENTRIC   │  motovibrador + VFD, OUTSIDE, in cool air
              │  0.18 kW    │  adjustable counterweights
              └─────────────┘
              steel base frame, floor-anchored

Vibration mode: fixture floats on 4 soft springs (fn ≈ 5 Hz); the rod transmits the eccentric's force. Everything hot is stationary; everything rotating is cool.

Shock mode: springs removed; the rod lifts the fixture a set height on two guide shafts and releases it onto elastomer pucks bolted to the chamber floor. Same fixture, same DUT mounting, same accelerometer. Mode change ≈ 20 min.

Axes: rotate the DUT in its bracket, not the rig. Three orthogonal orientations.

Do not attempt vibration and shock simultaneously — the pad stiffness requirements are in direct conflict (2.5 N/mm vs 210 kN/m, a factor of ~80).

Service penetrations

  • Drive rod: 50 mm bore, silicone bellows boot (200 °C rated, trivially available). Conduction through the bellows wall is <0.1 W; budget 5–10 W for annulus convection. Irrelevant against 900 W.
  • DUT harness (24 V, RS-232/RS-485, thermocouples, accelerometer): silicone gland plate on the rear face, with a slack service loop inside so the moving fixture doesn't tension the cables. This is the #1 thing that breaks on rigs like this — give it 150 mm of slack and anchor both ends.

4. Thermal stage — 75 °C capable, 60 °C operating

Sizing (D1)

Steady-state conduction, 75 mm rockwool (k ≈ 0.040 W·m⁻¹·K⁻¹), 0.40 m inner / 0.55 m outer, mean area 1.354 m²:

Setpoint Ambient Conduction ×3 for leakage, bridges, penetrations
60 °C 15 °C 32.5 W 97 W
75 °C 15 °C 43.3 W 130 W
75 °C 25 °C 36.1 W 108 W

Note the elegance of D1: 75 mm of insulation at 75 °C loses the same as 50 mm at 60 °C. The extra insulation pays for the extra ΔT exactly.

Pull-up dominates the sizing. 10 kg alu fixture + hardware + 5 kg DUT:

Target Energy @ 600 W @ 900 W @ 1200 W
60 °C (ΔT 35 K) 455 kJ 14 min 9 min 7 min
75 °C (ΔT 50 K) 650 kJ 20 min 13 min 10 min

Specify 900 W = 3 × 300 W PTC fan-heater modules, PID-controlled together. The air charge is 3.2 kJ — negligible against 650 kJ of metal, so don't bother sizing for it.

PTC elements remain the right choice: self-limiting, sealed modules with the fan integrated, cannot run away if the fan stops.

Control and safety — two independent layers, non-negotiable

  1. Control: REX-C100 PID → SSR-40DA → the three heaters. Type-K thermocouple in the return air stream, not touching a DUT.
  2. Independent over-temperature cutout: KSD301 100 °C NC thermostat in series with the coil of a mechanical contactor feeding the heaters. The dominant SSR failure mode is shorted on, and the PID then has zero authority. The contactor is the only thing between a stuck SSR and a fire during an overnight soak. Prove it by test at commissioning — jumper the SSR closed deliberately and confirm the contactor drops out.
  3. 10 A breaker, metal control enclosure, PE bonded to the alu liner and to the steel frame.

D1 material consequences

  • All internal wiring silicone-insulated, not PVC. PVC at 75 °C in still air next to a 300 W element will go brittle and then conductive.
  • Door seal: silicone oven gasket (rated 200 °C+), not EPDM or foam tape.
  • Rockwool, not EPS/XPS/polyiso. EPS is rated ~75 °C — i.e. exactly at our design point — and will soften and outgas. Rockwool is non-combustible and costs the same.
  • 3 mm aluminium liner as both fire barrier and fibre containment.
  • The HBOX ASA case softens ~95–100 °C, so 75 °C is safe for the enclosure itself. The cells are the constraint, not the plastic.

Independent temperature logging

Three spare type-K probes (one per DUT surface, one in air) → 4-channel SD/USB logger, outside the box. The report needs a measured trace, not "the PID display said 60."

🔴 Battery hazard

The HBOX contains a lithium pack. 60 °C ambient + self-heating + LTE TX bursts puts cells above their charge window, and per Battery-Chemistry-HighTemp v1.0 the LTC4040 already hot-pauses at ≈ +42 °C with RNTB = 10 k.

  • First soaks: pack fitted, charger inhibited, thermocouple on the pack.
  • Never leave the first soak of a new configuration unattended.
  • Class-D extinguisher or dry sand + welding blanket at the rig. Not CO₂.
  • Do not run the 75 °C capability with a Li-ion pack installed. 75 °C is for bare-board and enclosure work, or for LFP once that decision lands.
  • Useful side effect: this chamber is the cheapest way to prove the RNTB → 5.6 k + high-temp LFP decision before it enters the 30-unit BOM.

5. Vibration stage (re-sized for M = 10.3 kg)

Suspension

fn k total per spring (×4) static deflection
4 Hz 6.51 kN/m 1.63 N/mm 15.5 mm
5 Hz 10.17 kN/m 2.54 N/mm 9.9 mm
6 Hz 14.65 kN/m 3.66 N/mm 6.9 mm

Specify 4 × 2.5 N/mm compression springs, fn ≈ 5 Hz, ~10 mm static sag. Band A starts near this resonance — do not dwell at 5–7 Hz until the accelerometer trace has been watched.

The honest limitation (unchanged in principle, better in magnitude)

A fixed eccentric on a soft-mounted mass gives constant displacement, so acceleration rises as f²:

m_e·e x peak 5 Hz 10 Hz 20 Hz 30 Hz 45 Hz 60 Hz 80 Hz
1 g·m 0.10 mm 0.01 0.04 0.16 0.35 0.79 1.41 2.50
2 g·m 0.19 mm 0.02 0.08 0.31 0.70 1.58 2.81 5.00
5 g·m 0.49 mm 0.05 0.20 0.78 1.76 3.95 7.03 12.5
10 g·m 0.97 mm 0.10 0.39 1.56 3.51 7.91 14.1 25.0
20 g·m 1.94 mm 0.20 0.78 3.12 7.03 15.8 28.1 50.0

(values in g)

You cannot hold a flat level across 5–80 Hz with one weight setting. Anyone claiming an eccentric rig "runs IEC 60068-2-6" either has closed-loop amplitude control or is not measuring.

Banded sweep plan — this is the operating procedure

Band Freq Motor RPM Counterweight m_e·e as mass @ 50 mm x peak a at bottom → top
A 5–15 Hz 300–900 12.5 g·m 250 g 1.22 mm 0.12 → 1.10 g
B 15–40 Hz 900–2400 3.2 g·m 64 g 0.31 mm 0.28 → 2.00 g
C 40–80 Hz 2400–4800 1.4 g·m 28 g 0.14 mm 0.88 → 3.50 g

Sweep each band at 1 octave/min, N cycles, in Z first (crane deck is dominantly vertical), then X, then Y. The accelerometer logs what actually happened and the report states measured levels per band. That is honest and still perfectly good at finding cracked joints.

⚠ Band C overspeeds a 60 Hz motor to 80 Hz on the VFD. Check the motovibrador's rated maximum centrifugal force and bearing speed first, and de-rate the weights accordingly — bearing load scales as f² too. If the datasheet forbids it, stop band C at 60 Hz and add the BLDC option (§5.3).

5.3 Optional reach above 80 Hz (~$1,200 MXN)

RC outrunner BLDC + 80 A ESC + servo tester, eccentric disc on the shaft, spins past 10 000 rpm. Crude, but it is the only cheap way to excite PCB-level resonances (typically 150–300 Hz) — which is where L22, U25 and the 100 µF/50 V can would crack if they are going to. Worth adding if the field log shows meaningful energy above 80 Hz, or if a post-test teardown finds joint damage.

5.4 Phase 2 (~$6k MXN) — the woofer shaker

15" pro woofer, voice coil coupled to a light fixture, class-D amp from a PC sound card, accelerometer as the control sensor → genuine closed-loop swept sine and random, 20–200 Hz. ~100 N of force, so ~2 g on a 5 kg bare-PCBA fixture. The only sub-$10k route to a truly controlled profile. Not needed for v1; revisit after the first campaign.


6. Impact / shock stage (re-sized for M = 10.3 kg)

Guided drop inside the chamber. The fixture is lifted on the drive rod plus two guide shafts and released onto elastomer pucks on the chamber floor. Peak g and duration are set by drop height and puck stiffness, and both are measured.

Severity Δv Drop, 30 % rebound Drop, 0 % rebound Pad k total per pad (×4)
3 g / 30 ms 0.56 m/s 10 mm 16 mm 0.113 MN/m 28 kN/m
15 g / 11 ms 1.03 m/s 32 mm 54 mm 0.841 MN/m 210 kN/m
30 g / 11 ms 2.06 m/s 128 mm 216 mm 0.841 MN/m 210 kN/m
30 g / 18 ms 3.37 m/s 343 mm 580 mm 0.314 MN/m 79 kN/m

Everything to 30 g / 11 ms fits inside 250 mm of shaft travel, which fits inside the 400 mm chamber. 30 g / 18 ms does not — that one needs the fixture outside the box, cold. Accept that limit.

Puck starting sizes for 15 g / 11 ms, from k = E·A/L, 25 mm thick: Shore 60A ≈ 41 mm dia, Shore 70A ≈ 33 mm dia.

⚠ k = E·A/L under-estimates real rubber in compression: a constrained squat puck is stiffened by its shape factor, often 2–4×. The pucks you actually need will be smaller or softer than the table says. Buy an assortment (Shore 60A and 70A, 20/25/30/40/50 mm) and tune against the accelerometer trace. Budget one afternoon.

Lift by hand with a lever and a detent for v1. Motorise with a cam later only if we want 1000-shock endurance runs.


7. Instrumentation

What Sensor Notes
Rig reference vibration ADXL355 (±8 g, 20-bit, SPI) Bolted to the fixture plate. This is the sensor the report quotes
Shock peaks ADXL1002 (±50 g, 11 kHz BW, analog) The ADXL355 will clip and alias on a 15 g / 11 ms pulse
DUT-internal vibration U26 SC7A20, already on the v6 board Free. Correlating it against the field log is the validation of the rig
Temperature 3 × type-K + the DUT's own tair (SHT40), tntc, tbat (TMP102) Already in $PHLG
DUT health $PHLG over RS-232/RS-485, logged continuously Pass/fail evidence

Logger: Teensy 4.0 or Pi Pico → SD, ≥2 kHz on the shock channel, outside the hot box. Sensor cables through the rear gland plate with the service loop.

Define pass/fail on $PHLG before the first run, not after. Suggested: no GNSS fix loss > N s · no modem re-registration · no watchdog reset · no cflt that fails to clear · C/N₀ drift within X dB.


8. BOM (MXN, Sep-2026 street prices, ±25 %) — D1 + D2 configuration

Thermal stage — 900 W, 75 °C capable

Item Qty Est.
Aluminium sheet 3 mm, liner + door (0.4 m cube) — 2,000
Rockwool board 75 mm, ~2.5 m² — 1,000
Outer skin: 18 mm plywood or 1.2 mm steel, frame — 900
PTC fan-heater module 220 V 300 W 3 1,050
High-temp circulation fan, metal blade 1 400
PID kit: REX-C100 + SSR-40DA + type-K probe 1 450
KSD301 100 °C NC cutout + mechanical contactor + 10 A breaker 1 550
3 × spare type-K probes + 4-ch SD/USB temp logger 1 700
Silicone-insulated wire (internal), silicone glands, gland plate — 600
Silicone oven gasket, piano hinge, over-centre latches — 500
Silicone bellows boot, 50 mm bore + floor flange 1 450
Control enclosure, IEC inlet, indicators, E-stop — 800
Subtotal 9,800

Vibration stage (D2 — full)

Item Qty Est.
Motovibrador 3-ph 0.18–0.25 kW, adjustable counterweights 1 3,500
VFD 0.75 kW, 220 V 1-ph in → 3-ph out 1 1,900
Aluminium fixture plate 15 mm, 300×300 1 1,400
Drive rod 20 mm steel + couplings + rod-end bearing — 900
Compression springs 2.5 N/mm + guide cups 4 500
Steel base frame (2" PTR, welded, floor-anchored) 1 1,600
Guarding: steel mesh + polycarbonate window, E-stop 1 1,200
Fasteners, Loctite 243, DUT brackets (crane-identical) — 700
Subtotal 11,700

Impact stage

Item Qty Est.
Guide shaft 16 mm × 300 mm + SC16UU bearings 2 + 4 900
Lift lever, detent, release latch, shaft supports 1 900
Rubber puck assortment, Shore 60A/70A, 20/25/30/40/50 mm — 600
Subtotal 2,400

Instrumentation

Item Qty Est.
ADXL355 breakout 1 1,100
ADXL1002 breakout (shock channel) 1 700
Teensy 4.0 + SD + protoboard + silicone wiring 1 900
Subtotal 2,700

Total

MXN
Thermal 9,800
Safety (was missing a cost line in v1.0 — corrected) 1,100
Vibration 11,700
Impact 2,400
Instrumentation 2,700
Subtotal 27,700
Contingency 15 % 4,155
TOTAL ≈ 31,855

Authoritative costing is now the BOM workbook, not this table: 2026-09-17_Drogheda_HALT-Rig_BOM_v1.0.xlsx. The v1.0 draft understated the thermal stage by $400 (arithmetic) and carried the safety kit at zero.

$1,855 above the $30k top of the agreed band. Three ways to come back inside:

  • Drop the ADXL1002 and accept clipped shock peaks on the ADXL355 (−700). Not recommended; the shock channel is the one measurement we cannot fake.
  • Steel fixture plate instead of aluminium (−700). Adds 6 kg of moving mass and undoes part of §3. Not recommended.
  • Build the thermal stage now and the mechanical stage in October from the next budget cycle. This is the recommended way to stage it — the chamber is useful alone and is the part that addresses our actual known failures.

9. Build sequence (shop time available — D3)

Week Shop Firmware / field Gate
1 (22–26 Sep) Cut and fold the liner, build the shell, mount heaters + circulation fan, wire PID + SSR + contactor and cutout Finish $PHLG vibration fields + SC7A20 driver; flash one unit G1: empty chamber holds 60.0 ± 1.0 °C for 4 h; cutout proven by deliberate SSR-short test
2 (29 Sep–3 Oct) Base frame, fixture plate, drive rod, bellows, springs, guarding. (Note: ICAVE/Lázaro shipment lands this week — expect contention) Unit mounted on a live crane at ICAVE; logging G2: bare fixture sweeps 5–80 Hz, accelerometer trace logged and sane; no frame resonance in band
3 (6–10 Oct) Drop conversion: guide shafts, lift lever, puck tuning Pull the field log; derive PSD + shock spectrum; freeze the rig target profile G3: three consecutive pulses within ±20 % of target; rig profile signed off
4 (13–17 Oct) Run campaign v1 (§10) — G4: report

Commissioning runs that must not be skipped:

  • Empty chamber, 4 h at 60 °C — map the hot spots with the three spare probes before a DUT confuses the picture. Then repeat once at 75 °C.
  • Bare fixture sweep, all three bands — characterise the rig's own resonances. If the base frame or the guarding rings at 30 Hz, you will spend the campaign chasing it.
  • Deliberate SSR-short test — see G1. Do it with nothing in the box.

10. Campaign v1

DUT-A gets everything. DUT-B is the control and gets only the thermal soak — so a failure tells us heat or mechanics, not both. Both fully instrumented, powered and transmitting throughout.

  1. Baseline — 1 h at 25 °C, full $PHLG, GNSS + NTRIP + LTE. Record C/N₀, fix type, modem RSSI, tbat, cflt. This is the reference.
  2. Thermal soak — ramp to 60 °C over 30 min, hold 8 h with LTE TX active; cool to ambient; ×3 cycles. Watch: charge stall, modem re-registration storms, fan policy, watchdog resets, C/N₀ drift.
  3. Hot vibration — at 60 °C, bands A/B/C, 10 sweep cycles each, Z then X then Y.
  4. Hot shock — still at 60 °C, 100 half-sine pulses per direction × 3 orientations, at the measured field severity (fallback 15 g / 11 ms).
  5. Post-test — repeat step 1 verbatim and diff against the baseline. Then open both units: visual inspection of L22, U25, the 100 µF/50 V can, the GX16 entry and every connector; torque-check every screw; re-seat and re-measure both U.FL pigtails.

The diff in step 5 is the deliverable. "Nothing visibly broke" is not a result. "C/N₀ fell 2.1 dB and never recovered" is.


11. What this rig will NOT give you

State this plainly in any client-facing use of the results.

  • No traceability — no calibrated accelerometer, no accredited lab, no certificate. Self-declared measurements with a commercial MEMS reference.
  • No closed-loop profile control — a measured, displacement-limited banded sweep, not a controlled constant-g or PSD-shaped profile.
  • Single-axis at a time, not simultaneous triaxial.
  • No cold, no humidity, no salt fog. Ports are humid and saline; for us that is probably a more relevant missing test than cold. Consider a salt-fog add-on after this rig proves out.
  • Not a substitute for certification if a client demands IEC/EN compliance. It is a legitimate pre-screen that makes a paid lab run far more likely to pass first time — which is where it saves real money.

12. Remaining open items

  1. Battery-in vs battery-out for campaign v1. Recommendation: in, charger inhibited, pack instrumented. Revisit when the LFP decision lands. Hard rule: no Li-ion pack in the box above 60 °C.
  2. Who owns the rig? It needs a named owner for calibration checks (monthly accelerometer cross-check, thermocouple ice-point check) or it will drift and quietly stop being trustworthy.
  3. Week-2 shop contention with the ICAVE/Lázaro shipment. Flagged, not resolved.
  4. BLDC option (§5.3) — decide after the field log shows whether there is energy above 80 Hz.

References

  • IEC 60068-2-6 — Test Fc, sinusoidal vibration
  • IEC 60068-2-27 — Test Ea, mechanical shock (half-sine severities)
  • IEC 60068-2-64 — Test Fh, broadband random vibration
  • IEC 61373 — Railway rolling stock, shock and vibration, Cat 1 Class B
  • 03-Architecture-Hardware/2026-09-09_Drogheda_Battery-Chemistry-HighTemp_v1.0.md
  • 03-Architecture-Hardware/2026-08-24_Drogheda_EinarBoard-v6_GNSS-4G-Integration_Design-Brief_v1.0.md
  • 06-Testing-Validation/RCA-2026-06-field-failures.md
  • 06-Testing-Validation/2026-08-18_Drogheda_FW-v3.0.3_Fan-Policy_Bench-Test_v1.0.md
  • Companion: 2026-09-17_Drogheda_HALT-Rig_BOM_v1.0.xlsx (authoritative BOM — buy from this)
  • Companion: 2026-09-17_Drogheda_HALT-Rig_Lista-Compras_ES_v1.0.md (narrative purchasing notes)