159 lines
9.6 KiB
Markdown
159 lines
9.6 KiB
Markdown
# PLAN.md — Project Drogheda URGENT Remediation
|
||
|
||
**Updated:** 2026-06-19 · **Owner:** Leo Rodriguez
|
||
**Situation:** **all HBOX units have been removed from the machines.** We have
|
||
**4 units in hand — 3 not working, 1 working-ish.** They are **physically in
|
||
Veracruz**; the team is in **Querétaro → debugging is remote** until they ship or
|
||
someone on-site is our hands. Units run **v1 firmware** (no thermal log).
|
||
Strategy: **ruggedize now + PCB in parallel**; near-term work pivots to **remote
|
||
backend analysis (doable from QRO today)** + a **remote diagnostic protocol**
|
||
(`06-Testing-Validation/remote-diagnostic-protocol.md`).
|
||
|
||
Legend: ⬜ todo · 🔄 in progress · ✅ done · 👤 owner TBD · ⛔ blocker
|
||
|
||
---
|
||
|
||
## P0 — DO THIS WEEK (stop the bleeding, learn the truth)
|
||
|
||
### Logistics — units are in Veracruz, we're in Querétaro (decide first)
|
||
- ⬜ 👤 **Ship the 4 units to Querétaro** *(recommended)* — small parcels; remote-
|
||
debugging dead electronics is slow and inconclusive vs 1–2 days for full bench
|
||
access. **Bring the working-ish unit too — it's the control.** Confirm with ICAVE
|
||
who **owns** the units / whether they may leave the terminal.
|
||
- ⬜ 👤 If they can't ship: stand up **remote-hands** in Veracruz using
|
||
`06-Testing-Validation/remote-diagnostic-protocol.md` (tiered: photos+current draw → USB dashboard
|
||
→ remote desktop). Need a cooperative on-site tech with a bench PSU + laptop.
|
||
|
||
### Diagnosis (cheapest first — could change everything)
|
||
- ⬜ 👤 **Backend triage — now the #1 lead** (backend code review done, see
|
||
`02-Architecture-Software/backend-review.md`; two confirmed software defects can take healthy units
|
||
off Wialon). Do these free checks first:
|
||
- **htracker-online vs Wialon-offline:** any unit ONLINE in Helgen's monitor but
|
||
OFFLINE in the client's Wialon = **backend victim, not dead hardware.** Check
|
||
ZPM 020 + RS-SAN-001 this way *before* the teardown.
|
||
- Confirm the **live process** (`systemctl status htracker` — service runs the
|
||
blocking `retranslator.py`; `run_retranslator.sh` runs a different file).
|
||
- Gateway log + **`netstat -su`** UDP drops in the death window; did all units
|
||
drop within seconds (→ HOL stall) or one-by-one (→ anti-jump lockout)?
|
||
- NTRIP caster (HelgenSRV) availability + **per-SIM data balance/suspension**.
|
||
- ⬜ 👤 **Pull the field logs** (battery V, fix quality, reset timestamps) and
|
||
correlate Wialon gaps with the ~5/10-min v1 reset cadence.
|
||
- ⬜ 👤 **Check the installed fuse** rating vs measured worst-case + inrush (H5).
|
||
|
||
### Client (ICAVE) — relationship is on the line
|
||
- ✅ Units **removed** from the machines (all of them, not just ZPM 020 / RS-SAN-001).
|
||
- ⬜ 👤 **Reply to Agustín/ICAVE** (Spanish): acknowledge each review point, share
|
||
the plan, commit dates. *Draft not yet written — ask Claude to draft it; Leo sends.*
|
||
- ⬜ 👤 Agree **custody/shipping** of the 4 pulled units with ICAVE (see Logistics).
|
||
|
||
### Bench (unblocks the hardware spec)
|
||
- ⬜ 👤 **Measure the power budget** — idle/1 Hz/**LTE-TX-burst** current + inrush
|
||
at 12 V and 24 V (`hardware brief §2`). Picks the DC-DC and fuse.
|
||
- ⬜ 👤 **Bench-test firmware v2** on a Blackpill + simpleRTK2B stack: power-cycle
|
||
recovery, NMEA-timeout, thermal read, LED patterns. *Do not field-flash
|
||
untested.*
|
||
|
||
---
|
||
|
||
## P1 — SHORT TERM (≈1–3 weeks): ruggedize the fleet (Phase 1)
|
||
|
||
- ⬜ 👤 **Quantify the heat:** thermocouple/logger inside a representative cabinet
|
||
for a full sunny shift → real interior-temp number to design against.
|
||
- ⬜ 👤 Build a **Phase-1 ruggedization kit** and rework **one reference unit**:
|
||
- **the ASA inner box stays** (UV-stable, ~95–100 °C — adequate); optionally
|
||
mount the boards to the cabinet plate for better conduction
|
||
- replace Dupont → locking JST/Molex connectors
|
||
- replace PowerBoost 1000C → **24 V→5 V** industrial buck ≥3 A (cabinet feeds 24 V)
|
||
- **verify the cabinet blade fuse** (Phoenix PT 6-FSI/C) vs measured worst-case
|
||
- resolve battery (relocate/replace/drop — see decision below)
|
||
- vibration mounting (isolated standoffs), retain boards, torque SMAs
|
||
- **thermal: conduct heat to the metal plate, sunshade/reflective — NO internal
|
||
fan in a sealed box (does nothing); keep a Gore vent for condensation**
|
||
- conformal coat; front-panel SIM access
|
||
- ⬜ 👤 **Flash firmware v2** on every unit (thermal logging + real 4G recovery).
|
||
- ⬜ 👤 **Triage the 4 pulled units** (3 dead + 1 working-ish as control) via
|
||
`06-Testing-Validation/remote-diagnostic-protocol.md`: bench power-on with **current-draw reading**,
|
||
LED + USB-dashboard capture, photos (swollen LiPo? discoloured boost? cracked
|
||
solder? loose SMA?). Classify each against the decision tree; **teardown the
|
||
genuinely-dead ones in QRO**. Update `06-Testing-Validation/RCA-2026-06-field-failures.md`.
|
||
- ⬜ 👤 **Instrument one unit** with an interior thermocouple for a full sunny
|
||
shift — quantify the thermal problem with a number.
|
||
- ⬜ 👤 Roll the validated Phase-1 build across the fleet.
|
||
|
||
### Backend (parallel to the hardware work — see `02-Architecture-Software/backend-review.md`)
|
||
- ⬜ 👤 **Anti-jump hotfix** to the running `retranslator.py`: make the threshold
|
||
time/speed-aware, **re-anchor after N rejects (self-heal)**, and **clear
|
||
`device_last_pos` on TTL cleanup**. Small, safe, stops permanent black-holing.
|
||
- ⬜ 👤 Set `SQL_THROTTLE_S` back to its intended 300 s; bump UDP `SO_RCVBUF`.
|
||
- ⬜ 👤 **Rotate the MSSQL `sa` password** (committed in `README.md`) and purge
|
||
secrets (`.env`, `.htracker_env`) from git history.
|
||
|
||
---
|
||
|
||
## P2 — PERMANENT FIX (≈3–8 weeks): the named incomplete tasks
|
||
|
||
### ⭐ Incomplete task #1 — **Design the Watchdog PCB**
|
||
- ⬜ 👤 Schematic for the integrated carrier (protection front-end, ≥3 A buck,
|
||
load switch/eFuse, STM32 + sense + SWD/debug, hold-up footprint, locking I/O,
|
||
bulkhead SMA, front-panel/MFF2 SIM) — `hardware brief §4`.
|
||
- ⬜ 👤 Layout (4-layer, industrial temp, GNSS RF kept clean of switcher noise).
|
||
- ⬜ 👤 Fab + assemble **2–3 pilot boards**; bring up with v2 firmware.
|
||
- ⬜ 👤 Environmental test pilots (thermal soak + vibration) before fleet rollout.
|
||
|
||
### ⭐ Backend — migrate to the async retranslator (the real concurrency fix)
|
||
- ⬜ 👤 Adopt `retranslator_async.py` (decoupled UDP→queue→workers, per-connection
|
||
async) **after** porting in: the corrected anti-jump filter, **cell_id-based
|
||
identity** (not source IP — CGNAT-safe), and realistic load testing.
|
||
- ⬜ 👤 Rewrite `load_test.py` to measure **end-to-end** (packets forwarded to
|
||
Wialon, ack latency, UDP drops) against a **slow upstream**, not just UDP sends.
|
||
|
||
### ⭐ Incomplete task #2 — **Re-spec HBOX components for production**
|
||
- ⬜ 👤 Lock the BOM decisions (`hardware brief §6`): **battery strategy**, SIM
|
||
strategy, MCU choice, enclosure (plastic+sunshade vs metal heatsink), modem.
|
||
- ⬜ 👤 Produce a documented, repeatable production BOM + assembly doc ("apt for
|
||
production" — directly answers the client).
|
||
|
||
---
|
||
|
||
## Key decisions Leo must make (block design — see hardware brief §6)
|
||
|
||
0. **Logistics (now):** **ship the 4 units to QRO** (recommended) vs **remote-hands
|
||
in Veracruz** — gates how fast we can confirm the hardware root cause.
|
||
1. **Battery mode:** keep (→ LiFePO4/relocated), ride-through only (→ supercap),
|
||
or **drop** (vehicle-only)? *Recommended: drop if ICAVE doesn't need parked
|
||
tracking — removes the worst thermal/safety liability. Confirm with client.*
|
||
2. **Enclosure:** **ASA inner box is adequate** (UV-stable, ~95–100 °C) — no swap
|
||
needed; keep ABS IP67 cabinet + sunshade + **conduct heat to a metal plate**, or go
|
||
**metal cabinet as heatsink**. (A bare internal fan ≠ a fix; v3.0 uses a ducted fan.)
|
||
3. **SIM:** swappable front-panel vs **MFF2 eSIM**.
|
||
4. **MCU:** reuse F411 vs industrial-temp STM32.
|
||
|
||
---
|
||
|
||
## 🔴 Cross-cutting red item — FINANCIALS
|
||
- ⬜ 👤 Model **unit economics** (BOM cost → price → margin), per-BU revenue/COGS,
|
||
cashflow/billing, burn (PCB NRE + pilot), warranty reserve. Placeholder +
|
||
open questions in [[00-Project-Management/Financials|Financials.md]]. *Detailed
|
||
work happens in a separate conversation; keep it in sync here.*
|
||
|
||
## Deliverables in this repo (Helgen `NN-` layout, updated 2026-06-20)
|
||
|
||
| File | What |
|
||
|---|---|
|
||
| `CLAUDE.md` | master index (inherits Helgen ethos) |
|
||
| `00-Project-Management/` | `PLAN.md` · `ethos.md` · `hackathon-plan.md` · `Financials.md` · `client-comms/` |
|
||
| `01-Requirements/` | `SRS.md` · `HBOX-product-spec.md` |
|
||
| `02-Architecture-Software/backend-review.md` | htracker review (HOL block + anti-jump lockout) |
|
||
| `03-Architecture-Hardware/` | `hardware-respec-and-pcb-brief.md` · `cabinet-electrical-bom.md` · `watchdog-schematic.md` · `firmware-review.md` · `BOM-master.md` |
|
||
| `04-Source-Code/` | `firmware/` (v2 deploy · v1 ref) · `htracker/` · `notifications/` (Mattermost) |
|
||
| `06-Testing-Validation/` | `RCA-2026-06-field-failures.md` · `remote-diagnostic-protocol.md` |
|
||
|
||
## Still open / not done here
|
||
- ✅ `htracker` **code review done** → `02-Architecture-Software/backend-review.md`.
|
||
- ✅ Repo migrated to the **Helgen English `NN-` standard**; Mattermost notifier wired.
|
||
- ⬜ Apply the **anti-jump hotfix** + secret rotation (P1 backend, above).
|
||
- ⬜ **Financials** model (red item, above) — separate conversation.
|
||
- **Client reply (Spanish)** — not drafted yet (Leo opted to hold); ask when ready.
|
||
- Field logs not yet ingested — RCA stays DRAFT until they are.
|
||
- 🧹 Delete empty legacy Spanish dirs locally (the mount can't): `cd ~/Documents/Claude/Projects/Drogheda && rmdir 0?_* 99_Archivo docs hardware firmware repo emails backend skills 2>/dev/null`
|