Skip to content

Salt-lamp meeting reminder — v1 spec, STPA safety analysis, and atopile hardware board - #1

Open
Dementor430 wants to merge 26 commits into
mainfrom
design/salt-lamp-reminder
Open

Salt-lamp meeting reminder — v1 spec, STPA safety analysis, and atopile hardware board#1
Dementor430 wants to merge 26 commits into
mainfrom
design/salt-lamp-reminder

Conversation

@Dementor430

Copy link
Copy Markdown
Owner

USB-C powered salt lamp that slowly pulses a warm-white LED ~5 min before a meeting ends — an ambient nudge synced to an Outlook calendar, processed on-device (no hosted backend). Two SKUs, one board: a conference-room unit and a desk unit.

This PR lands the full v1 arc: design spec → STPA safety analysis → hardware implementation plan → the complete atopile board (built across 11 reviewed tasks). Firmware and calendar integration are separate future cycles.

What's here

  • docs/superpowers/specs/…-salt-lamp-reminder-design.md — v1 design spec (finalized hardware + 4 locked decisions).
  • docs/stpa/ — 5-iteration System-Theoretic Process Analysis (hardware-personal, hardware-meetingroom, firmware), run to convergence.
  • docs/superpowers/plans/…-salt-lamp-hardware.md — 11-task implementation plan.
  • elec/src/ — the atopile board (v0.2.x): ground.ato top-level + power, regulator, mcu, led_driver, overtemp, sensing modules, real JLCPCB parts, and the vendored generics dependency.

Architecture

USB-C → USB-PD 9V (CH224K) → eFuse (TPS25961) → 9V → {AL8860 buck CC → warm-white LED on pigtail; AP63203 buck → always-on 3.3V → ESP32-C3-MINI-1U}; SHT40 temp/humidity (I²C); SK6812 RGB status; autonomous over-temp safety cut (TLV3012 window comparator + SN74LVC1G74 latch + AND gate → eFuse EN, MCU-independent).

Key decisions

  1. Over-temp owned by hardware — coupled NTC + autonomous latching cut, firmware is backup only.
  2. Open / repairable — no Secure Boot lockdown on standard units; signed OTA + HMAC-NVS secret storage; open-sourceable at EOL; optional locked enterprise variant.
  3. Optional webhook heartbeat (reliability, not safety).
  4. Dedicated RGB status LED (dark when healthy); salt light stays warm-white-only.

Quality gates

  • ato build green (default + ci), zero ERC errors, all asserts pass; reproducible (ci vs default bit-identical).
  • BOM: 39 part groups / 64 instances, all resolved to real LCSC IDs.
  • Every task independently reviewed; final whole-branch review (system-level) verified the power tree, the MCU-independent safety chain, and control-net consistency. The review process caught — and this PR fixes — two would-be-Critical defects in the over-temp circuit (open-drain comparator that never tripped; inverted latch) that a green build alone did not reveal.

Track-for-fab (not blocking the design; flagged in-code / in-spec)

  • MCU variant: ships ESP32-C3-MINI-1U-H4 (NRND); BOM-lock to pin-identical -1U-H4X once a JLCPCB code exists. Cert-matched ≤2.33 dBi external antenna is a required BOM-locked sub-assembly (RED).
  • Pre-fab verify: TPS25961 OVLO/RILIM set-points vs datasheet; SK6812 at 3.3V (~5% below min VDD) — validate at 0/40 °C; over-temp POR-vs-ramp timing.
  • Layout: KiCad footprint placement pending (atopile v0.2 interactive plugin); large buck inductor may be swapped at layout.
  • Tooling: see docs/DEVELOPMENT.mdato build is self-contained, but future ato install needs the documented easyeda2kicad workaround.

🤖 Generated with Claude Code

Dementor430 and others added 22 commits June 28, 2026 03:50
Local-processing USB-C salt lamp that pulses a warm-white LED 5 min before
a meeting ends. Finalizes hardware (ESP32-C3-MINI-1U + USB-PD 9V + buck CC
driver), firmware approach (iCal + Graph), EU compliance path, and the
room/desk two-SKU framing. Output of a 7-agent two-round research pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…endar paths day-one

- Add SHT4x-class temp/RH sensor (§4.5); replace fixed standing-warmth with a
  humidity/dew-point closed loop (§4.4) + software over-temp backstop
- Build published-.ics and Graph (OAuth) in parallel from day one (was iCal-first)
- Update architecture diagram, risks (R6 reframed, R8 added), implementation order

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rmware

System-Theoretic Process Analysis of the salt-lamp reminder spec, run as an
iterative loop until each scope converged (no new structural failure class):
- hardware-personal: converged at iteration 3
- hardware-meetingroom: converged at iteration 3
- firmware: converged at iteration 4 (added the secure-provisioning /
  supply-chain root-of-trust lifecycle class)

Each doc covers losses -> hazards -> constraints -> control structure ->
unsafe control actions (4 guidewords) -> loss scenarios -> derived
requirements, plus cross-document interaction findings.

Load-bearing design decisions surfaced for sign-off (tracked as open gaps):
- LED over-temp protection currently owned by neither layer (coupled NTC +
  autonomous foldback should be mandatory, not optional)
- signing-key rotation headroom is a one-way eFuse decision needed pre-unit-1
- silent-failure / heartbeat channel vs the no-backend non-goal
- single warm-white channel overloaded across glow/breathe/fault/stale modes

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…y, heartbeat, status LED

- #1 LED over-temp now owned by hardware: coupled MCPCB NTC + autonomous comparator
  latching driver/eFuse EN (MCU-independent); firmware D_max is backup. Cavity SHT4x is
  ambient/dryness only. Resolves the cross-doc "owned by neither layer" contradiction.
- #2 Open/repairable security: no Secure Boot lockdown / no whole-device flash encryption
  on standard units; signed OTA + HMAC-scheme NVS encryption + scoped/revocable secrets;
  open-source at EOL; optional locked Secure-Boot+HSM enterprise variant.
- #3 Optional webhook heartbeat (reliability, not safety): off by default, fixed-interval
  health POST, no calendar contents, status reflects real pipeline health + last_sync_ok.
- #4 Dedicated RGB status LED on base (dark when healthy); salt light stays warm-white only.

Adds goals/non-goals, §4.6, decision log §11, and risk-table updates (R7, R9).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…er-temp comparator, status LED)

Delta-STPA scoped to the new failure surface from the four design decisions;
converged (high confidence) on all three docs. 60 confirmed-novel findings.

Headline new structural class: the MCU-independent over-temp comparator is
unannunciated — when it latches the LED rail off, the salt light goes dark
(reads as healthy), the RGB stays green, and the heartbeat posts "operational".
Fix: a mandatory MCU-readable latch-STATE sense line (default=FAULT).

Also: open build has no on-device root of trust (revocation becomes primary
secret protection); NTC brine-bridge false-cold pinout/creepage; two-variant
governance control; EOL "never bricks" must be variant-scoped; heartbeat
token-in-URL log exposure.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…se line, NTC pinout)

- §4.3: add the latch-STATE sense line (MCU-readable, default=FAULT) so the
  autonomous over-temp cut is annunciated; NTC pinout/creepage + fail-toward-HOT
  (brine-bridge false-cold); comparator certified as sole over-temp layer.
- §2: scope the "never bricks" promise to standard units; locked units get a
  separate EOL anti-brick commitment.
- §5: heartbeat token-hardening (header over URL, mutual exclusion, jitter, wipe).
- §11: record iteration-5 convergence + carried-forward (non-board) items.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
11 tasks: scaffold -> install JLCPCB parts -> PowerInput (USB-C/CH224K PD-9V/eFuse)
-> protection -> 3.3V rail -> ESP32-C3-MINI-1U -> AL8860 LED driver -> autonomous
over-temp (NTC fail-toward-hot + comparator latch + MCU-readable latch state) ->
SHT4x + SK6812 -> top-level integration -> BOM/layout handoff. Per-task loop is
ato build (compile/solve/pick + asserts + ERC) then commit.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…omparator from JLCPCB

Parts installed (verified in-stock on LCSC/JLCPCB):
  C2765186  TYPE-C 16PIN 2MD(073)  USB-C 16P receptacle
  C970725   CH224K                 USB-PD sink (WCH, 9V resistor-set)
  C125330   AL8860WT-7             buck CC LED driver (SOT-23-5)
  C5571272  TPS25961DRVR           eFuse 2.7–19V, EN, adj-ILIM (WSON-6)
  C3013922  ESP32-C3-MINI-1U-H4   MCU module, ext-antenna U.FL
  C2909890  SHT40-AD1B-R2         temp/humidity I2C (DFN-4)
  C5378720  SK6812                 addressable RGB LED (5×5 mm)
  C2867795  TLV3011AIDBVT         single comparator push-pull (SOT-23-6)

All .ato files land in elec/src/; footprints in elec/footprints/.
ato build passes (parts present, unwired).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- power.ato: new PowerInput module (USB-C → CH224K 9V PD → TPS25961 eFuse → power_9v)
- CH224K: single-resistor mode, 6.8kΩ on CFG1 → 9V request (CFG2/CFG3 NC)
- RILIM=33kΩ for ~1.5A limit (datasheet: 25kΩ→2A, proportional scaling)
- OVLO divider: 1MΩ/51kΩ → trip ≈10.3V (above 9V, below 12V next PDO)
- USB-C orientation-reversible: Dp1~Dp2, Dn1~Dn2; EH→GND
- Exported: power_vbus, power_9v (9V±5%), usb_data, pg (CH224K.PG), efuse_en
- ground.ato: instantiate PowerInput, tie power_9v.gnd ~ gnd
- ato build: green, no errors

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
SMAJ12A-13-F (C134947, SMA, 12 V standoff / 19.9 V clamp) across VBUS;
TPD4E05U06QDQARQ1 (C81353, USON-10, 0.5 pF/ch) protecting CC1/CC2/D+/D-.
Creepage layout comment added per brief.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
AP63203WU-7 (LCSC C780769): fixed 3.3V, 2A, 3.8V-32V input, SOT-26.
Inductor: CD75-4R7M (LCSC C2826691), 4.7uH, >2A rated.
Fed from power_vbus (pre-efuse) so radio never browns out when LED
efuse is gated. Decoupling: 10uF in, 22uF out, 100nF BST cap.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
AL8860WT-7 hysteretic step-down CC driver: R_S=120mΩ (0805) between VIN and
SET pin sets I_LED = 0.1V/R_S ≈ 833mA (assert PASSED: 793–877 mA within 0.7–1A).
Catch diode SS34 C8678 (40V/3A SMA, from generics). Inductor CYH127-47UH C2929503
(47uH/2.5A SMD, per AL8860 datasheet 33–100uH recommendation for 9V input).
RC low-pass (10kΩ + 100nF) converts MCU LEDC PWM to smooth analog CTRL voltage.
Pigtail JST B4B-XH-A C144395 (4-pin 2.5mm keyed TH): p1=LED+, p2=LED-,
p3=NTC_sense, p4=NTC_gnd (NTC pins open here; consumed in Task 8).
Only regulated DC exits on pigtail — SW node stays on-board (EMC, STPA).
…, MCU-readable latch state

MCU-independent over-temp cut (STPA decision #1 / spec 4.3):
- Window comparator (2x TLV3011) on the off-board MCPCB NTC: trips on HOT
  (R_ntc low ~100C), SHORT/brine bridge (sense->3V3), and OPEN/disconnected
  (sense->0V) -- fail-toward-hot for every named failure mode.
- Self-holding NPN+PFET regenerative latch (power-on-clear): holds the trip
  until power cycle, no auto-recovery while the LED may still be hot.
- SN74LVC1G08 AND gate: efuse_en = fw_en AND not_overtemp. Either firmware
  disable OR an over-temp trip pulls power.efuse_en low, cutting power_9v to
  the AL8860 (no enable pin) via the eFuse EN.
- latch_state -> mcu.overtemp_sense via isolation R; r_latch default-pulls it
  LOW = FAULT so a dead/unpowered latch never reads healthy.
- Fail-safe pulldowns on efuse_en and not_overtemp: every passive default is
  LED-OFF / FAULT.

Resolves previously-dangling power.efuse_en, mcu.efuse_en_out,
mcu.overtemp_sense. Adds C7666 (AND), C20526 (NPN), C85202 (PFET),
C118873 (signal diode). ato build green; 3 threshold asserts pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…latch, correct polarity

Redesign of the non-functional over-temp protection (was commit 5ed0f1a):
- C1: replace open-drain TLV3011 with push-pull TLV3012 (C2863635) so the
  diode-OR overtemp_fault node is actively driven HIGH on a fault.
- C2: latch output is now the D-FF Qbar -> tripped drives not_overtemp LOW
  -> AND(fw_en, not_overtemp) LOW -> eFuse EN LOW -> LED OFF, latched.
- I1/I2: replace the fragile discrete MMBT3904/BSS84 regenerative latch with a
  dedicated set-dominant SN74LVC1G74 D-FF (C70285) wired as an async SR latch
  with a POR RC async-clear; add SN74LVC1G04 inverter (C7827) so an
  already-present-at-power-on fault still latches (level/async set via PRE#).
- M1: comments corrected to TLV3012 push-pull, 1.242 V internal REF.

Build green (default + ci), all 4 asserts pass. Netlist pin-verified.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
SK6812 powered from 3.3 V rail (datasheet min 3.5 V; no 3.3 V-native
addressable RGB exists on LCSC in this protocol family). Firmware must
keep brightness ≤ 50 % to stay within safe operating margin. VBUS
(5 V / 9 V PD) explicitly excluded. I2C pull-ups via I2CPullup (10 kΩ);
100 nF decoupling on both SHT40 and SK6812 VDD.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… clean ERC

- ground.ato: add ButtonSKRPACE010 (LCSC C139797) for config/boot button wired
  to mcu.button.io (IO9) and GND; 10k pull-up already in mcu.ato (r_boot).
- ground.ato: add ProgramHeader4Pin (LCSC C492405, 1x4 2.54mm TH) for
  EN/IO9(BOOT)/GND/3V3 pogo-pin jig access (DNP on production).
- ground.ato: finalize ground stitching — rail3v3, driver, overtemp all tied
  to single top-level gnd net.
- mcu.ato: export en and boot signals (additive) to expose ESP32-C3 EN and
  IO9 nets at the module boundary for the TP header.
- Build: exit 0, zero ERC errors; only pre-existing No-MPN warning on driver.d1.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix SS34_C8678 (U12) missing mpn field: LCSC showed '?' pre-fix;
  add `mpn = "C8678"` to generics/elec/src/SS34_C8678.ato. All 39
  BOM groups now resolve to a real LCSC ID (64 component instances total).
- Commit atopile generics dependency (elec/src/generics/, 85 files)
  which was installed but previously untracked.
- Build verified reproducible: `ato build -b ci` produces bit-identical
  BOM (build/ci.csv) and netlist (build/ci.net) vs default build.
  (`--frozen` flag not available in ato 0.2.69; manual diff confirms.)
- Netlist handoff: build/default.net has 64 components / 55 nets;
  elec/layout/default/ground.kicad_pcb has board outline ready for
  KiCad plugin to populate footprints.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…OM-lock

1. Reproducibility: document that `ato build` is self-contained, and the
   machine-local easyeda2kicad CloudFront/User-Agent + lceda.cn fallback
   workaround needed only for future `ato install --jlcpcb` of new parts
   (docs/DEVELOPMENT.md + README pointer). No venv file committed.

2. Repo hygiene: add .superpowers/ (and board.json) to .gitignore; untrack
   .superpowers/sdd/task-9-report.md (accidentally committed in 6feb2f8),
   keeping the local file.

3. MCU/antenna (spec §4.1, R4): correct mcu.ato docstring — the -1U module
   has an on-MODULE U.FL/IPEX (MHF III) connector (no board-side u.FL part),
   ships without antenna, so a cert-matched <=2.33 dBi external antenna +
   pigtail is a required BOM-locked sub-assembly for RED cert inheritance.
   -1U-H4 (C3013922) is NRND; recommended -1U-H4X has no JLCPCB code yet and
   the only -H4X part (C41349510) is the wrong PCB-antenna -1 variant, so keep
   H4 with a BOM-LOCK swap note at the import, in mcu.ato, and in spec §4.1.

Build remains green (zero ERC errors; pre-existing implicit-decl warnings only).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 28, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 180 files, which is 30 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: e26f7a7e-5162-4ac7-b704-ebd0b16d0c04

📥 Commits

Reviewing files that changed from the base of the PR and between d88cadc and 1287982.

⛔ Files ignored due to path filters (37)
  • elec/src/parts/ALPSALPINE_SKRPACE010/ALPSALPINE-SKRPACE010_C139797.pdf is excluded by !**/*.pdf
  • elec/src/parts/DMBJ_CD75_4R7M_4_7UH/DMBJ-CD75-4R7M-4-7UH_C2826691.pdf is excluded by !**/*.pdf
  • elec/src/parts/Diodes_Incorporated_AL8860WT_7/Diodes-Incorporated-AL8860WT-7_C125330.pdf is excluded by !**/*.pdf
  • elec/src/parts/Diodes_Incorporated_AP63203WU_7/Diodes-Incorporated-AP63203WU-7_C780769.pdf is excluded by !**/*.pdf
  • elec/src/parts/Diodes_Incorporated_SMAJ12A_13_F/Diodes-Incorporated-SMAJ12A-13-F_C134947.pdf is excluded by !**/*.pdf
  • elec/src/parts/Espressif_Systems_ESP32_C3_MINI_1U_H4/2206021745_Espressif-Systems-ESP32-C3-MINI-1U-H4_C3013922.pdf is excluded by !**/*.pdf
  • elec/src/parts/FOJAN_FRC0402F2003TS/2308241947_FOJAN-FRC0402F2003TS_C2906866.pdf is excluded by !**/*.pdf
  • elec/src/parts/FOJAN_FRL0805FR120TS/2308241009_FOJAN-FRL0805FR120TS_C2930214.pdf is excluded by !**/*.pdf
  • elec/src/parts/JST_Sales_America_B4B_XH_A_LF__SN/JST-B4B-XH-A-LF-SN_C144395.pdf is excluded by !**/*.pdf
  • elec/src/parts/MDD_Microdiode_Electronics_SS34/MDD-Microdiode-Semiconductor-SS34_C8678.pdf is excluded by !**/*.pdf
  • elec/src/parts/OPSCO_Optoelectronics_SK6812/2303300930_OPSCO-Optoelectronics-SK6812_C5378720.pdf is excluded by !**/*.pdf
  • elec/src/parts/SHOU_HAN_CYH127_47UH/2201121400_SHOU-HAN-CYH127-47UH_C2929503.pdf is excluded by !**/*.pdf
  • elec/src/parts/Samsung_Electro_Mechanics_CL05A105KA5NQNC/Samsung-Electro-Mechanics-CL05A105KA5NQNC_C52923.pdf is excluded by !**/*.pdf
  • elec/src/parts/Samsung_Electro_Mechanics_CL05B104KO5NNNC/Samsung-Electro-Mechanics-CL05B104KO5NNNC_C1525.pdf is excluded by !**/*.pdf
  • elec/src/parts/Samsung_Electro_Mechanics_CL21A106KAYNNNE/Samsung-Electro-Mechanics-CL21A106KAYNNNE_C15850.pdf is excluded by !**/*.pdf
  • elec/src/parts/Samsung_Electro_Mechanics_CL31A226KAHNNNE/Samsung-Electro-Mechanics-CL31A226KAHNNNE_C12891.pdf is excluded by !**/*.pdf
  • elec/src/parts/Sensirion_SHT40_AD1B_R2/2110211930_Sensirion-SHT40-AD1B-R2_C2909890.pdf is excluded by !**/*.pdf
  • elec/src/parts/Texas_Instruments_SN74LVC1G04DBVR/Texas-Instruments-SN74LVC1G04DBVR_C7827.pdf is excluded by !**/*.pdf
  • elec/src/parts/Texas_Instruments_SN74LVC1G08DBVR/Texas-Instruments-SN74LVC1G08DBVR_C7666.pdf is excluded by !**/*.pdf
  • elec/src/parts/Texas_Instruments_SN74LVC1G74DCUR/Texas-Instruments-SN74LVC1G74DCUR_C70285.pdf is excluded by !**/*.pdf
  • elec/src/parts/Texas_Instruments_TLV3012AIDBVT/2303010730_Texas-Instruments-TLV3012AIDBVT_C2863635.pdf is excluded by !**/*.pdf
  • elec/src/parts/Texas_Instruments_TPD4E05U06QDQARQ1/Texas-Instruments-TPD4E05U06QDQARQ1_C81353.pdf is excluded by !**/*.pdf
  • elec/src/parts/Texas_Instruments_TPS25961DRVR/2306061122_Texas-Instruments-TPS25961DRVR_C5571272.pdf is excluded by !**/*.pdf
  • elec/src/parts/UNI_ROYAL_0402WGF1001TCE/UNI-ROYAL-Uniroyal-Elec-0402WGF1001TCE_C11702.pdf is excluded by !**/*.pdf
  • elec/src/parts/UNI_ROYAL_0402WGF1002TCE/UNI-ROYAL-Uniroyal-Elec-0402WGF1002TCE_C25744.pdf is excluded by !**/*.pdf
  • elec/src/parts/UNI_ROYAL_0402WGF1003TCE/UNI-ROYAL-Uniroyal-Elec-0402WGF1003TCE_C25741.pdf is excluded by !**/*.pdf
  • elec/src/parts/UNI_ROYAL_0402WGF1004TCE/UNI-ROYAL-Uniroyal-Elec-0402WGF1004TCE_C26083.pdf is excluded by !**/*.pdf
  • elec/src/parts/UNI_ROYAL_0402WGF1302TCE/UNI-ROYAL-Uniroyal-Elec-0402WGF1302TCE_C25754.pdf is excluded by !**/*.pdf
  • elec/src/parts/UNI_ROYAL_0402WGF2001TCE/UNI-ROYAL-Uniroyal-Elec-0402WGF2001TCE_C4109.pdf is excluded by !**/*.pdf
  • elec/src/parts/UNI_ROYAL_0402WGF2002TCE/UNI-ROYAL-Uniroyal-Elec-0402WGF2002TCE_C25765.pdf is excluded by !**/*.pdf
  • elec/src/parts/UNI_ROYAL_0402WGF2203TCE/UNI-ROYAL-Uniroyal-Elec-0402WGF2203TCE_C25767.pdf is excluded by !**/*.pdf
  • elec/src/parts/UNI_ROYAL_0402WGF3302TCE/UNI-ROYAL-Uniroyal-Elec-0402WGF3302TCE_C25779.pdf is excluded by !**/*.pdf
  • elec/src/parts/UNI_ROYAL_0402WGF5102TCE/UNI-ROYAL-Uniroyal-Elec-0402WGF5102TCE_C25794.pdf is excluded by !**/*.pdf
  • elec/src/parts/UNI_ROYAL_0402WGF6801TCE/UNI-ROYAL-Uniroyal-Elec-0402WGF6801TCE_C25917.pdf is excluded by !**/*.pdf
  • elec/src/parts/WCH_CH224K/WCH-Jiangsu-Qin-Heng-CH224K_C970725.pdf is excluded by !**/*.pdf
  • elec/src/parts/XFCN_PZ254V_11_06P/XFCN-PZ254V-11-06P_C492405.pdf is excluded by !**/*.pdf
  • elec/src/parts/onsemi_1N4148WS/onsemi-1N4148WS_C118873.pdf is excluded by !**/*.pdf
📒 Files selected for processing (180)
  • .gitignore
  • .vscode/settings.json
  • .vscode/settings.json.j2
  • LICENSE
  • README.md
  • README.md.j2
  • ato.yaml
  • ato.yaml.j2
  • docs/DEVELOPMENT.md
  • docs/stpa/2026-06-28-stpa-firmware.md
  • docs/stpa/2026-06-28-stpa-hardware-meetingroom.md
  • docs/stpa/2026-06-28-stpa-hardware-personal.md
  • docs/superpowers/plans/2026-06-28-salt-lamp-hardware.md
  • docs/superpowers/specs/2026-06-28-salt-lamp-reminder-design.md
  • elec/footprints/footprints.kicad_sym
  • elec/layout/default/__name__.kicad_pcb.j2
  • elec/layout/default/fp-lib-table
  • elec/layout/default/ground.kicad_pcb
  • elec/layout/default/ground.kicad_pro
  • elec/layout/default/ground.kicad_sch
  • elec/src/__name__.ato.j2
  • elec/src/ground.ato
  • elec/src/led_driver.ato
  • elec/src/mcu.ato
  • elec/src/overtemp.ato
  • elec/src/parts/ALPSALPINE_SKRPACE010/ALPSALPINE_SKRPACE010.ato
  • elec/src/parts/ALPSALPINE_SKRPACE010/KEY-SMD_4P-L4.2-W3.2-H2.5-LS4.6-P2.2.step
  • elec/src/parts/ALPSALPINE_SKRPACE010/KEY-SMD_4P-L4.2-W3.2-P2.20-LS4.6.kicad_mod
  • elec/src/parts/ALPSALPINE_SKRPACE010/SKRPACE010.kicad_sym
  • elec/src/parts/DMBJ_CD75_4R7M_4_7UH/CD75-4R7M.kicad_sym
  • elec/src/parts/DMBJ_CD75_4R7M_4_7UH/DMBJ_CD75_4R7M_4_7UH.ato
  • elec/src/parts/DMBJ_CD75_4R7M_4_7UH/IND-SMD_L7.8-W7.0-A.kicad_mod
  • elec/src/parts/DMBJ_CD75_4R7M_4_7UH/IND-SMD_L7.8-W7.0-A.step
  • elec/src/parts/Diodes_Incorporated_AL8860WT_7/AL8860WT-7.kicad_sym
  • elec/src/parts/Diodes_Incorporated_AL8860WT_7/Diodes_Incorporated_AL8860WT_7.ato
  • elec/src/parts/Diodes_Incorporated_AL8860WT_7/SOT-23-5_L2.9-W1.6-H1.1-LS2.8-P0.95.step
  • elec/src/parts/Diodes_Incorporated_AL8860WT_7/SOT-23-5_L3.0-W1.7-P0.95-LS2.8-BR.kicad_mod
  • elec/src/parts/Diodes_Incorporated_AP63203WU_7/AP63203WU-7.kicad_sym
  • elec/src/parts/Diodes_Incorporated_AP63203WU_7/Diodes_Incorporated_AP63203WU_7.ato
  • elec/src/parts/Diodes_Incorporated_AP63203WU_7/TSOT-26_L2.9-W1.6-P0.95-LS2.8-BL.kicad_mod
  • elec/src/parts/Diodes_Incorporated_AP63203WU_7/TSOT-26_L2.9-W1.6-P0.95-LS2.8-BL.step
  • elec/src/parts/Diodes_Incorporated_SMAJ12A_13_F/Diodes_Incorporated_SMAJ12A_13_F.ato
  • elec/src/parts/Diodes_Incorporated_SMAJ12A_13_F/SMAJ12A-13-F.kicad_sym
  • elec/src/parts/Diodes_Incorporated_SMAJ12A_13_F/SMA_L4.4-W2.6-LS5.0-RD.kicad_mod
  • elec/src/parts/Diodes_Incorporated_SMAJ12A_13_F/SMA_L4.4-W2.6-LS5.0-RD.step
  • elec/src/parts/Espressif_Systems_ESP32_C3_MINI_1U_H4/ESP32-C3-MINI-1U-H4.kicad_sym
  • elec/src/parts/Espressif_Systems_ESP32_C3_MINI_1U_H4/Espressif_Systems_ESP32_C3_MINI_1U_H4.ato
  • elec/src/parts/Espressif_Systems_ESP32_C3_MINI_1U_H4/WIFIM-SMD_ESP32-C3-MINI-MINI-1U.kicad_mod
  • elec/src/parts/Espressif_Systems_ESP32_C3_MINI_1U_H4/WIFIM-SMD_ESP32-C3-MINI-MINI-1U.step
  • elec/src/parts/FOJAN_FRC0402F2003TS/FOJAN_FRC0402F2003TS.ato
  • elec/src/parts/FOJAN_FRC0402F2003TS/FRC0402F2003TS.kicad_sym
  • elec/src/parts/FOJAN_FRC0402F2003TS/R0402.kicad_mod
  • elec/src/parts/FOJAN_FRC0402F2003TS/R0402_L1.0-W0.5-H0.4.step
  • elec/src/parts/FOJAN_FRL0805FR120TS/FOJAN_FRL0805FR120TS.ato
  • elec/src/parts/FOJAN_FRL0805FR120TS/FRL0805FR120TS.kicad_sym
  • elec/src/parts/FOJAN_FRL0805FR120TS/R0805.kicad_mod
  • elec/src/parts/FOJAN_FRL0805FR120TS/R0805_L2.0-W1.3-H0.6.step
  • elec/src/parts/JST_Sales_America_B4B_XH_A_LF__SN/B4B-XH-A(LF)(SN).kicad_sym
  • elec/src/parts/JST_Sales_America_B4B_XH_A_LF__SN/CONN-TH_B4B-XH-A-LF-SN.kicad_mod
  • elec/src/parts/JST_Sales_America_B4B_XH_A_LF__SN/JST_Sales_America_B4B_XH_A_LF__SN.ato
  • elec/src/parts/JST_Sales_America_B4B_XH_A_LF__SN/XH2.5-4A.step
  • elec/src/parts/MDD_Microdiode_Electronics_SS34/MDD_Microdiode_Electronics_SS34.ato
  • elec/src/parts/MDD_Microdiode_Electronics_SS34/SMA_L4.3-W2.6-LS5.2-RD.kicad_mod
  • elec/src/parts/MDD_Microdiode_Electronics_SS34/SMA_L4.3-W2.6-LS5.2-RD.step
  • elec/src/parts/MDD_Microdiode_Electronics_SS34/SS34_C8678.kicad_sym
  • elec/src/parts/OPSCO_Optoelectronics_SK6812/LED-SMD_4P-L5.0-W5.0-LS5.4-TL-1.kicad_mod
  • elec/src/parts/OPSCO_Optoelectronics_SK6812/LED-SMD_4P-L5.0-W5.0-LS5.4-TL-1.step
  • elec/src/parts/OPSCO_Optoelectronics_SK6812/OPSCO_Optoelectronics_SK6812.ato
  • elec/src/parts/OPSCO_Optoelectronics_SK6812/SK6812_C5378720.kicad_sym
  • elec/src/parts/SHOU_HAN_CYH127_47UH/CYH127-47UH.kicad_sym
  • elec/src/parts/SHOU_HAN_CYH127_47UH/IND-SMD_L12.3-W12.3_SMDRI127.kicad_mod
  • elec/src/parts/SHOU_HAN_CYH127_47UH/SHOU_HAN_CYH127_47UH.ato
  • elec/src/parts/SHOU_HAN_CYH127_47UH/SMD-PIND_L12.5-W12.5-H8.0.step
  • elec/src/parts/SHOU_HAN_TYPE_C_16PIN_2MD_073/SHOU_HAN_TYPE_C_16PIN_2MD_073.ato
  • elec/src/parts/SHOU_HAN_TYPE_C_16PIN_2MD_073/TYPE-C16PIN2MD(073).kicad_sym
  • elec/src/parts/SHOU_HAN_TYPE_C_16PIN_2MD_073/USB-C-SMD_TYPE-C-16PIN-2MD-073.kicad_mod
  • elec/src/parts/SHOU_HAN_TYPE_C_16PIN_2MD_073/USB-C-SMD_TYPE-C-6PIN-2MD-073.step
  • elec/src/parts/Samsung_Electro_Mechanics_CL05A105KA5NQNC/C0402.kicad_mod
  • elec/src/parts/Samsung_Electro_Mechanics_CL05A105KA5NQNC/C0402_L1.0-W0.5-H0.5.step
  • elec/src/parts/Samsung_Electro_Mechanics_CL05A105KA5NQNC/CL05A105KA5NQNC.kicad_sym
  • elec/src/parts/Samsung_Electro_Mechanics_CL05A105KA5NQNC/Samsung_Electro_Mechanics_CL05A105KA5NQNC.ato
  • elec/src/parts/Samsung_Electro_Mechanics_CL05B104KO5NNNC/C0402.kicad_mod
  • elec/src/parts/Samsung_Electro_Mechanics_CL05B104KO5NNNC/C0402_L1.0-W0.5-H0.5.step
  • elec/src/parts/Samsung_Electro_Mechanics_CL05B104KO5NNNC/CL05B104KO5NNNC.kicad_sym
  • elec/src/parts/Samsung_Electro_Mechanics_CL05B104KO5NNNC/Samsung_Electro_Mechanics_CL05B104KO5NNNC.ato
  • elec/src/parts/Samsung_Electro_Mechanics_CL21A106KAYNNNE/C0805.kicad_mod
  • elec/src/parts/Samsung_Electro_Mechanics_CL21A106KAYNNNE/C0805_L2.0-W1.3-H1.3.step
  • elec/src/parts/Samsung_Electro_Mechanics_CL21A106KAYNNNE/CL21A106KAYNNNE.kicad_sym
  • elec/src/parts/Samsung_Electro_Mechanics_CL21A106KAYNNNE/Samsung_Electro_Mechanics_CL21A106KAYNNNE.ato
  • elec/src/parts/Samsung_Electro_Mechanics_CL31A226KAHNNNE/C1206.kicad_mod
  • elec/src/parts/Samsung_Electro_Mechanics_CL31A226KAHNNNE/C1206_L3.2-W1.6-H1.3.step
  • elec/src/parts/Samsung_Electro_Mechanics_CL31A226KAHNNNE/CL31A226KAHNNNE.kicad_sym
  • elec/src/parts/Samsung_Electro_Mechanics_CL31A226KAHNNNE/Samsung_Electro_Mechanics_CL31A226KAHNNNE.ato
  • elec/src/parts/Sensirion_SHT40_AD1B_R2/DFN-4_L1.5-W1.5-P0.8-TL-EP.kicad_mod
  • elec/src/parts/Sensirion_SHT40_AD1B_R2/DFN-4_L1.5-W1.5-P0.8.step
  • elec/src/parts/Sensirion_SHT40_AD1B_R2/SHT40-AD1B-R2.kicad_sym
  • elec/src/parts/Sensirion_SHT40_AD1B_R2/Sensirion_SHT40_AD1B_R2.ato
  • elec/src/parts/Texas_Instruments_SN74LVC1G04DBVR/SN74LVC1G04DBVR.kicad_sym
  • elec/src/parts/Texas_Instruments_SN74LVC1G04DBVR/SOT-23-5_L2.9-W1.6-H1.1-LS2.8-P0.95.step
  • elec/src/parts/Texas_Instruments_SN74LVC1G04DBVR/SOT-23-5_L3.0-W1.7-P0.95-LS2.8-BR.kicad_mod
  • elec/src/parts/Texas_Instruments_SN74LVC1G04DBVR/Texas_Instruments_SN74LVC1G04DBVR.ato
  • elec/src/parts/Texas_Instruments_SN74LVC1G08DBVR/SN74LVC1G08DBVR.kicad_sym
  • elec/src/parts/Texas_Instruments_SN74LVC1G08DBVR/SOT-23-5_L2.9-W1.6-H1.1-LS2.8-P0.95.step
  • elec/src/parts/Texas_Instruments_SN74LVC1G08DBVR/SOT-23-5_L3.0-W1.7-P0.95-LS2.8-BR.kicad_mod
  • elec/src/parts/Texas_Instruments_SN74LVC1G08DBVR/Texas_Instruments_SN74LVC1G08DBVR.ato
  • elec/src/parts/Texas_Instruments_SN74LVC1G74DCUR/SN74LVC1G74DCUR_C70285.kicad_sym
  • elec/src/parts/Texas_Instruments_SN74LVC1G74DCUR/SSOP-8_L2.0-W2.3-P0.50-LS3.1-BR.STEP
  • elec/src/parts/Texas_Instruments_SN74LVC1G74DCUR/SSOP-8_L2.0-W2.3-P0.50-LS3.1-BR.kicad_mod
  • elec/src/parts/Texas_Instruments_SN74LVC1G74DCUR/Texas_Instruments_SN74LVC1G74DCUR.ato
  • elec/src/parts/Texas_Instruments_TLV3012AIDBVT/SOT-23-6_L2.9-W1.6-H1.5-LS2.8-P0.95.step
  • elec/src/parts/Texas_Instruments_TLV3012AIDBVT/SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BR.kicad_mod
  • elec/src/parts/Texas_Instruments_TLV3012AIDBVT/TLV3012AIDBVT.kicad_sym
  • elec/src/parts/Texas_Instruments_TLV3012AIDBVT/Texas_Instruments_TLV3012AIDBVT.ato
  • elec/src/parts/Texas_Instruments_TPD4E05U06QDQARQ1/TPD4E05U06QDQARQ1.kicad_sym
  • elec/src/parts/Texas_Instruments_TPD4E05U06QDQARQ1/Texas_Instruments_TPD4E05U06QDQARQ1.ato
  • elec/src/parts/Texas_Instruments_TPD4E05U06QDQARQ1/USON-10_L2.5-W1.0-H0.6-P0.50.step
  • elec/src/parts/Texas_Instruments_TPD4E05U06QDQARQ1/USON-10_L2.5-W1.0-P0.50-BL.kicad_mod
  • elec/src/parts/Texas_Instruments_TPS25961DRVR/TPS25961DRVR.kicad_sym
  • elec/src/parts/Texas_Instruments_TPS25961DRVR/Texas_Instruments_TPS25961DRVR.ato
  • elec/src/parts/Texas_Instruments_TPS25961DRVR/WSON-6_L2.0-W2.0-H0.8-P0.65.step
  • elec/src/parts/Texas_Instruments_TPS25961DRVR/WSON-6_L2.0-W2.0-P0.65-TL-EP.kicad_mod
  • elec/src/parts/UNI_ROYAL_0402WGF1001TCE/0402WGF1001TCE.kicad_sym
  • elec/src/parts/UNI_ROYAL_0402WGF1001TCE/R0402.kicad_mod
  • elec/src/parts/UNI_ROYAL_0402WGF1001TCE/R0402_L1.0-W0.5-H0.4.step
  • elec/src/parts/UNI_ROYAL_0402WGF1001TCE/UNI_ROYAL_0402WGF1001TCE.ato
  • elec/src/parts/UNI_ROYAL_0402WGF1002TCE/0402WGF1002TCE.kicad_sym
  • elec/src/parts/UNI_ROYAL_0402WGF1002TCE/R0402.kicad_mod
  • elec/src/parts/UNI_ROYAL_0402WGF1002TCE/R0402_L1.0-W0.5-H0.4.step
  • elec/src/parts/UNI_ROYAL_0402WGF1002TCE/UNI_ROYAL_0402WGF1002TCE.ato
  • elec/src/parts/UNI_ROYAL_0402WGF1003TCE/0402WGF1003TCE.kicad_sym
  • elec/src/parts/UNI_ROYAL_0402WGF1003TCE/R0402.kicad_mod
  • elec/src/parts/UNI_ROYAL_0402WGF1003TCE/R0402_L1.0-W0.5-H0.4.step
  • elec/src/parts/UNI_ROYAL_0402WGF1003TCE/UNI_ROYAL_0402WGF1003TCE.ato
  • elec/src/parts/UNI_ROYAL_0402WGF1004TCE/0402WGF1004TCE.kicad_sym
  • elec/src/parts/UNI_ROYAL_0402WGF1004TCE/R0402.kicad_mod
  • elec/src/parts/UNI_ROYAL_0402WGF1004TCE/R0402_L1.0-W0.5-H0.4.step
  • elec/src/parts/UNI_ROYAL_0402WGF1004TCE/UNI_ROYAL_0402WGF1004TCE.ato
  • elec/src/parts/UNI_ROYAL_0402WGF1302TCE/0402WGF1302TCE.kicad_sym
  • elec/src/parts/UNI_ROYAL_0402WGF1302TCE/R0402.kicad_mod
  • elec/src/parts/UNI_ROYAL_0402WGF1302TCE/R0402_L1.0-W0.5-H0.4.step
  • elec/src/parts/UNI_ROYAL_0402WGF1302TCE/UNI_ROYAL_0402WGF1302TCE.ato
  • elec/src/parts/UNI_ROYAL_0402WGF2001TCE/0402WGF2001TCE.kicad_sym
  • elec/src/parts/UNI_ROYAL_0402WGF2001TCE/R0402.kicad_mod
  • elec/src/parts/UNI_ROYAL_0402WGF2001TCE/R0402_L1.0-W0.5-H0.4.step
  • elec/src/parts/UNI_ROYAL_0402WGF2001TCE/UNI_ROYAL_0402WGF2001TCE.ato
  • elec/src/parts/UNI_ROYAL_0402WGF2002TCE/0402WGF2002TCE.kicad_sym
  • elec/src/parts/UNI_ROYAL_0402WGF2002TCE/R0402.kicad_mod
  • elec/src/parts/UNI_ROYAL_0402WGF2002TCE/R0402_L1.0-W0.5-H0.4.step
  • elec/src/parts/UNI_ROYAL_0402WGF2002TCE/UNI_ROYAL_0402WGF2002TCE.ato
  • elec/src/parts/UNI_ROYAL_0402WGF2203TCE/0402WGF2203TCE.kicad_sym
  • elec/src/parts/UNI_ROYAL_0402WGF2203TCE/R0402.kicad_mod
  • elec/src/parts/UNI_ROYAL_0402WGF2203TCE/R0402_L1.0-W0.5-H0.4.step
  • elec/src/parts/UNI_ROYAL_0402WGF2203TCE/UNI_ROYAL_0402WGF2203TCE.ato
  • elec/src/parts/UNI_ROYAL_0402WGF3302TCE/0402WGF3302TCE.kicad_sym
  • elec/src/parts/UNI_ROYAL_0402WGF3302TCE/R0402.kicad_mod
  • elec/src/parts/UNI_ROYAL_0402WGF3302TCE/R0402_L1.0-W0.5-H0.4.step
  • elec/src/parts/UNI_ROYAL_0402WGF3302TCE/UNI_ROYAL_0402WGF3302TCE.ato
  • elec/src/parts/UNI_ROYAL_0402WGF5102TCE/0402WGF5102TCE.kicad_sym
  • elec/src/parts/UNI_ROYAL_0402WGF5102TCE/R0402.kicad_mod
  • elec/src/parts/UNI_ROYAL_0402WGF5102TCE/R0402_L1.0-W0.5-H0.4.step
  • elec/src/parts/UNI_ROYAL_0402WGF5102TCE/UNI_ROYAL_0402WGF5102TCE.ato
  • elec/src/parts/UNI_ROYAL_0402WGF6801TCE/0402WGF6801TCE.kicad_sym
  • elec/src/parts/UNI_ROYAL_0402WGF6801TCE/R0402.kicad_mod
  • elec/src/parts/UNI_ROYAL_0402WGF6801TCE/R0402_L1.0-W0.5-H0.4.step
  • elec/src/parts/UNI_ROYAL_0402WGF6801TCE/UNI_ROYAL_0402WGF6801TCE.ato
  • elec/src/parts/WCH_CH224K/CH224K.kicad_sym
  • elec/src/parts/WCH_CH224K/ESSOP-10_L4.9-W3.9-P1.0-LS6.0-TL-EP.kicad_mod
  • elec/src/parts/WCH_CH224K/ESSOP-10_L4.9-W3.9-P1.0-LS6.0-TL-EP.step
  • elec/src/parts/WCH_CH224K/WCH_CH224K.ato
  • elec/src/parts/XFCN_PZ254V_11_06P/HDR-TH_6P-P2.54-M-LI-1X6P.step
  • elec/src/parts/XFCN_PZ254V_11_06P/HDR-TH_6P-P2.54-V-M.kicad_mod
  • elec/src/parts/XFCN_PZ254V_11_06P/PZ254V-11-06P.kicad_sym
  • elec/src/parts/XFCN_PZ254V_11_06P/XFCN_PZ254V_11_06P.ato
  • elec/src/parts/onsemi_1N4148WS/1N4148WS_C118873.kicad_sym
  • elec/src/parts/onsemi_1N4148WS/SOD-323F-SMD_L1.6-W1.3-H1.1-LS2.7.step
  • elec/src/parts/onsemi_1N4148WS/SOD-323F_L2.0-W1.6-LS2.5-RD.kicad_mod
  • elec/src/parts/onsemi_1N4148WS/onsemi_1N4148WS.ato
  • elec/src/power.ato
  • elec/src/regulator.ato
  • elec/src/sensing.ato

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch design/salt-lamp-reminder

Comment @coderabbitai help to get the list of available commands.

Dementor430 and others added 4 commits June 28, 2026 17:53
… build green)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Establishes the 0.15 idiom pattern: 'from x.ato import X', pathless stdlib
imports (ElectricPower/ElectricLogic/Resistor/Capacitor), atomic-part imports
'from parts/.../X.ato import X_package', ElectricPower .hv/.lv, ~> for shunt
caps + series resistors, .resistance/.capacitance/.package. CH224K 9V (CFG1
6.8k), eFuse ILIM 33k + OVLO 1M/51k, TVS+ESD, USB D+/D- passthrough.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
All 6 modules (power, regulator, mcu, led_driver, overtemp, sensing) + ground.ato
translated v0.2 -> 0.15: ElectricPower/ElectricLogic/ElectricSignal, ~> bridges,
pathless stdlib imports, atomic-part imports, named pins on anonymous-pin parts.
28 atomic parts. ato build green (only a cosmetic non-PDF datasheet note).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.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.

1 participant