At-a-glance status of every NorthernWidget hardware design and firmware/software library across the current threads of work: bringing the libraries to a common form, the Schema 1 (NW-Device-Specification) rollout, and hardware readiness.
Generated by nw_status.py from the working tree, git, the GitHub API, and NW-Device-Specification. Cells listed in nw_status_manual.csv are hand-maintained (Schema 1 firmware and library state, hardware verification, next actions, notes); everything else is scanned. Supersedes nw_library_audit_2026-05-15.csv.
One row per device (its library and its hardware repo together) or per unpaired library; rows are banded as Devices, Standalone libraries, and Bare repos. This file carries one table per thread of work; the master table with every column side by side is nw_status_2026-09-24_icons.pdf. A column in which every row passes or does not apply is hidden and listed under the table.
Legend: ✅ done · ◐ partial · ❌ missing or wrong · — not applicable · ? not determined
Common sensor API: goal is that every sensor library presents the same C++ interface in Arduino style. Facets, one column each: begin() returns bool; getHeader()/getString(); the raw-readings triad beginRawReadings()/takeRawReading()/endRawReadings(); casing in two steps, camelCase conversion (every method has a camelCase name and any PascalCase name still present is marked [[deprecated]]) then PascalCase removed (no PascalCase method remains; "pending" while deprecated aliases are still carried); header string has no trailing space; header separator (comma or comma-space, a fact rather than a check, since the target format is undecided). Whether every sensor must carry the raw triad is also an open decision.
Release readiness: columns follow RELEASING.md, one per required file or field.
Open items that are not per-row: spec appendices still print Magic=0x00 (spec body says 0x4E); NorthernWidget_Core and the NorthernWidget bundle library have no repo yet; Firmware-Aggregator repolist.txt still names BME_Library and MCP3421; Symbiont-LiDAR_Library is not cloned locally (superseded by Apis); Monarch/Dyson libraries are archived, split into Libelle and Liasis.
| Row | Type | Library | GitHub | HW: Repo | HW: GitHub | Arduino registry | Open issues | Uncommitted files | HW: Open issues | HW: Uncommitted files |
|---|---|---|---|---|---|---|---|---|---|---|
| Devices | ||||||||||
| Apis | Sensor | Apis_Library | NorthernWidget/Apis_Library | Project-Apis | NorthernWidget/Project-Apis | ✅ | 3 | ✅ 0 | 19 | ◐ 2 |
| Haar | Sensor | Haar_Library | NorthernWidget/Haar_Library | Project-Haar | NorthernWidget/Project-Haar | ❌ no | 3 | ✅ 0 | 10 | ✅ 0 |
| Walrus | Sensor | Walrus_Library | NorthernWidget/Walrus_Library | Project-Walrus | NorthernWidget/Project-Walrus | ❌ no | 0 | ✅ 0 | 7 | ✅ 0 |
| Libelle | Sensor | Libelle_Library | NorthernWidget/Libelle_Library | Project-Libelle | NorthernWidget/Project-Libelle | ❌ no | 7 | ✅ 0 | 17 | ✅ 0 |
| Liasis | Sensor | Liasis_Library | NorthernWidget/Liasis_Library | Project-Liasis | NorthernWidget/Project-Liasis | ❌ no | 5 | ✅ 0 | 2 | ✅ 0 |
| Margay | Logger | Margay_Library | NorthernWidget/Margay_Library | Project-Margay | NorthernWidget/Project-Margay | ❌ no | 14 | ✅ 0 | 19 | ◐ 2 |
| Okapi | Logger | Okapi_Library | NorthernWidget/Okapi_Library | Project-Okapi | NorthernWidget/Project-Okapi | ❌ no | 8 | ✅ 0 | 22 | ◐ 1 |
| Tally | Sensor | Tally_Library | NorthernWidget-Skunkworks/Tally_Library | Project-Tally | NorthernWidget-Skunkworks/Project-Tally | ❌ no | 1 | ✅ 0 | 4 | ◐ 1 |
| Standalone libraries | ||||||||||
| MCP3421 | Component | MCP3421 | NorthernWidget/MCP3421 | — | — | ❌ no | 2 | ✅ 0 | — | — |
| NW_BME280 | Sensor | NW_BME280 | NorthernWidget/NW_BME280 | — | — | ❌ no | 0 | ✅ 0 | — | — |
| NW_Core | Core | NW_Core | NorthernWidget/NW_Core | — | — | ❌ no | 0 | ✅ 0 | — | — |
| DS3231 | Component | DS3231 | NorthernWidget/DS3231 | — | — | ✅ | 12 | ◐ 1 | — | — |
| DS3231_Logger | Component | DS3231_Logger | NorthernWidget/DS3231_Logger | — | — | ❌ no | 1 | ✅ 0 | — | — |
| MaxBotix_Library | Sensor | MaxBotix_Library | NorthernWidget/MaxBotix_Library | — | — | ❌ no | 4 | ◐ 3 | — | — |
| T9602_Library | Sensor | T9602_Library | NorthernWidget/T9602_Library | — | — | ❌ no | 0 | ✅ 0 | — | — |
| TP-Downhole_Library | Sensor | TP-Downhole_Library | NorthernWidget/TP-Downhole_Library | — | — | ❌ no | 5 | ◐ 1 | — | — |
| MS5803 | Component | MS5803 | NorthernWidget/MS5803 | — | — | ❌ no | 6 | ◐ 1 | — | — |
| MCP23018 | Component | MCP23018 | NorthernWidget-Skunkworks/MCP23018 | — | — | ❌ no | 0 | ✅ 0 | — | — |
| Bare repos | ||||||||||
| VEML6030 | Component | VEML6030 | NorthernWidget/VEML6030 | — | — | ❌ no | 1 | ✅ 0 | — | — |
| VEML6075 | Component | VEML6075 | NorthernWidget/VEML6075 | — | — | ❌ no | 0 | ✅ 0 | — | — |
| TCA9534 | Component | TCA9534 | NorthernWidget/TCA9534 | — | — | ❌ no | 1 | ✅ 0 | — | — |
| MCP4725 | Component | MCP4725 | NorthernWidget-Skunkworks/MCP4725 | — | — | ❌ no | 0 | ✅ 0 | — | — |
All rows pass or not applicable (column hidden): Unpushed commits, HW: Unpushed commits
| Row | version= | Last tag | version = tag | HW: Last tag | HW: Commits past tag | library.properties | paragraph= | url= ok | category= | LICENSE | README DOI badge | CITATION.cff | .zenodo.json | keywords.txt | doxygen_NW.cfg | src/ | _Demo example | Examples |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Devices | ||||||||||||||||||
| Apis | 0.1.0 | v0.1.0 | ✅ | v0.1.1 | 39 | ✅ | ✅ | ✅ | ✅ Sensors | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Apis_Demo, Apis_Readings, Margay |
| Haar | 1.0.0 | v1.0.0 | ✅ | v0.1.1 | 22 | ✅ | ✅ | ✅ | ✅ Sensors | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Haar_Demo, SerialDemo |
| Walrus | 0.2.0 | v0.2.0 | ✅ | v0.3.0 | 27 | ✅ | ✅ | ✅ | ✅ Sensors | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | SerialDemo, Walrus_Demo |
| Libelle | 1.0.0 | v1.0.0 | ✅ | v0.2.0 | 24 | ✅ | ✅ | ❌ WRONG (NorthernWidget-Skunkworks/Libelle_Library) | ✅ Sensors | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | LibelleMargayDemo, LibelleSWDemo, Libelle_Demo |
| Liasis | 1.0.0 | v1.0.0 | ✅ | v0.2.0 | 2 | ✅ | ✅ | ❌ WRONG (NorthernWidget-Skunkworks/Liasis_Library) | ✅ Sensors | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Liasis_Demo |
| Margay | 1.2.0 | v1.2.0 | ✅ | v2.2.2 | 97 | ✅ | ✅ | ✅ | ✅ Data Storage | ✅ | ❌ latestdoi (deprecated) | ✅ | ❌ MISSING | ✅ | ✅ | ✅ | ❌ MISSING | Basic, HighSpeed_NoSleep, Laser_Ranging, SensorDemo_TP-Downhole |
| Okapi | 0.7.0 | v0.6.0 | ❌ NO (v0.6.0 vs 0.7.0) | v0.6.0 | 7 | ✅ | ✅ | ❌ WRONG (NorthernWidget-Skunkworks/Okapi_Library) | ✅ Data Storage | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Okapi_Demo |
| Tally | 0.1.0 | none | ❌ no tag | v0.1 | 39 | ✅ | ✅ | ❌ WRONG (NorthernWidget_Skunkworks/Tally_Library) | ❌ MISSING | ✅ | ❌ no badge | ❌ MISSING | ❌ MISSING | ✅ | ❌ MISSING | ✅ | ❌ MISSING | Tally_I2C_Read |
| Standalone libraries | ||||||||||||||||||
| MCP3421 | 2.0.0 | v1.1.0 | ❌ NO (v1.1.0 vs 2.0.0) | — | — | ✅ | ✅ | ✅ | ✅ Signal Input/Output | ❌ MISSING | ✅ | ✅ | ✅ | ✅ | ❌ MISSING | ✅ | ❌ MISSING | VoltageRead |
| NW_BME280 | 3.0.0 | v3.0.0-alpha.1 | ❌ NO (v3.0.0-alpha.1 vs 3.0.0) | — | — | ✅ | ✅ | ✅ | ✅ Sensors | ✅ | ✅ | ✅ | ❌ MISSING | ✅ | ✅ | ✅ | ❌ MISSING | BasicReadings |
| NW_Core | 0.0.0 | none | ❌ no tag | — | — | ✅ | ✅ | ✅ | ✅ Sensors | ✅ | ❌ no badge | ❌ MISSING | ❌ MISSING | ✅ | ✅ | ✅ | ✅ | NW_Core_Demo |
| DS3231 | 1.2.0 | v1.2.0 | ✅ | — | — | ✅ | ✅ | ✅ | ✅ Timing | ✅ | ❌ no badge | ✅ | ❌ MISSING | ✅ | ❌ MISSING | ❌ flat layout | ❌ MISSING | AdvanceAlarm, AlarmInterrupt, AlarmPolling, DS3231_oscillator_test, DS3231_set, DS3231_test, echo_time, now, setEpoch, set_echo |
| DS3231_Logger | 0.1.0 | none | ❌ no tag | — | — | ✅ | ❌ blank | ✅ | ✅ Sensors | ❌ MISSING | ✅ | ✅ | ❌ MISSING | ✅ | ✅ | ✅ | ❌ MISSING | none |
| MaxBotix_Library | 1.1.0 | v1.0.0 | ❌ NO (v1.0.0 vs 1.1.0) | — | — | ✅ | ✅ | ✅ | ✅ Sensors | ✅ | ✅ | ✅ | ❌ MISSING | ❌ MISSING | ✅ | ✅ | ❌ MISSING | none |
| T9602_Library | 0.0.0 | v1.0.0 | ❌ NO (v1.0.0 vs 0.0.0) | — | — | ✅ | ✅ | ✅ | ✅ Sensors | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | T9602_Demo |
| TP-Downhole_Library | 0.1.0 | none | ❌ no tag | — | — | ✅ | ❌ blank | ❌ WRONG (NorthernWidget/TP-DownHole) | ✅ Sensors | ✅ | ❌ no badge | ❌ MISSING | ❌ MISSING | ✅ | ❌ MISSING | ✅ | ✅ | TP_Downhole_Demo |
| MS5803 | 0.1.2 | none | ❌ no tag | — | — | ✅ | ❌ blank | ✅ | ✅ Sensors | ✅ | ❌ MISSING README | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ MISSING | ✅ | ✅ | MS5803_Demo |
| MCP23018 | 0.0.0 | none | ❌ no tag | — | — | ✅ | ✅ | ✅ | ✅ Signal Input/Output | ✅ | ❌ no badge | ❌ MISSING | ❌ MISSING | ✅ | ❌ MISSING | ✅ | ❌ MISSING | MCP23008_DigitalWrite, MCP23018_DigitalWrite |
| Bare repos | ||||||||||||||||||
| VEML6030 | none | — | — | — | ❌ MISSING | — | — | ✅ | ✅ | ❌ no badge | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ flat layout | ❌ MISSING | none | |
| VEML6075 | none | — | — | — | ❌ MISSING | — | — | ✅ | ✅ | ❌ no badge | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ flat layout | ✅ | VEML6075_Demo | |
| TCA9534 | none | — | — | — | ❌ MISSING | — | — | ✅ | ✅ | ❌ MISSING README | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ flat layout | ❌ MISSING | none | |
| MCP4725 | none | — | — | — | ❌ MISSING | — | — | ✅ | ✅ | ❌ no badge | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ flat layout | ❌ MISSING | none |
| Row | begin() -> bool | Raw-readings triad | camelCase conversion | PascalCase removed | Header trailing space | Header separator |
|---|---|---|---|---|---|---|
| Devices | ||||||
| Apis | ✅ | ✅ | ✅ | ✅ | ✅ | comma |
| Haar | ✅ | ❌ MISSING | ✅ | ✅ | ❌ | comma-space |
| Walrus | ✅ | ❌ MISSING | ✅ | ✅ | ✅ | comma |
| Libelle | ✅ | ❌ MISSING | ✅ | ✅ | ✅ | comma |
| Liasis | ✅ | ❌ MISSING | ✅ | ✅ | ✅ | comma |
| Margay | ✅ | — | ✅ | ✅ | — | — |
| Okapi | ✅ | — | ✅ | ◐ pending (12 deprecated aliases) | — | — |
| Tally | ◐ uint8_t | ❌ MISSING | ❌ PascalCase only: Clear, ClearTicks, GetHeader, GetString … | ❌ NO (10 PascalCase live) | ❌ | comma-space |
| Standalone libraries | ||||||
| MCP3421 | ◐ int | — | ✅ | ✅ | — | — |
| NW_BME280 | ✅ | ✅ | ✅ | ◐ pending (5 deprecated aliases) | ✅ | comma |
| NW_Core | ✅ | — | ✅ | ✅ | — | — |
| DS3231 | — | — | ✅ | ✅ | — | — |
| DS3231_Logger | ◐ int | — | ✅ | ✅ | — | — |
| MaxBotix_Library | ✅ | ❌ MISSING | ◐ unmarked aliases: GetHeader, GetRange, GetString | ❌ NO (3 PascalCase live) | ❌ | comma-space |
| T9602_Library | ✅ | ❌ MISSING | ✅ | ✅ | ✅ | comma |
| TP-Downhole_Library | ◐ uint8_t | ❌ MISSING | ❌ PascalCase only: GetBaud, GetByte, GetData, GetHeader … | ❌ NO (10 PascalCase live) | ❌ | comma-space |
| MS5803 | ◐ uint8_t | — | ✅ | ✅ | — | — |
| MCP23018 | ✅ | — | ◐ unmarked aliases: DigitalWrite, PinMode, SetInterrupt | ❌ NO (3 PascalCase live) | — | — |
| Bare repos | ||||||
| VEML6030 | ◐ uint8_t | — | ❌ PascalCase only: AutoRange, Gain2Bits, GetALS, GetGain … | ❌ NO (20 PascalCase live) | — | — |
| VEML6075 | ◐ uint8_t | — | ❌ PascalCase only: GetUVA, GetUVB, Mode, PowerOn … | ❌ NO (7 PascalCase live) | — | — |
| TCA9534 | — | — | ❌ PascalCase only: Begin, DigitalWrite, PinMode | ❌ NO (3 PascalCase live) | — | — |
| MCP4725 | ◐ void | — | ❌ PascalCase only: SetGain, SetRef, Sleep | ❌ NO (3 PascalCase live) | — | — |
All rows pass or not applicable (column hidden): getHeader/getString
| Row | Compiles: Margay | Compiles: Okapi |
|---|---|---|
| Devices | ||
| Apis | ✅ | ✅ |
| Haar | ✅ | ✅ |
| Walrus | ✅ | ✅ |
| Libelle | ✅ | ✅ |
| Liasis | ✅ | ✅ |
| Margay | — | — |
| Okapi | — | — |
| Tally | ✅ | ✅ |
| Standalone libraries | ||
| MCP3421 | — | — |
| NW_BME280 | ✅ | ✅ |
| NW_Core | — | — |
| DS3231 | — | — |
| DS3231_Logger | — | — |
| MaxBotix_Library | ◐ FAIL | ◐ FAIL |
| T9602_Library | ✅ | ✅ |
| TP-Downhole_Library | — | — |
| MS5803 | — | — |
| MCP23018 | — | — |
| Bare repos | ||
| VEML6030 | — | — |
| VEML6075 | — | — |
| TCA9534 | — | — |
| MCP4725 | — | — |
| Row | docs.yml | .doxybook config | _docs/ site config | README API link |
|---|---|---|---|---|
| Devices | ||||
| Apis | ✅ | ✅ | ✅ | ✅ |
| Haar | ✅ | ✅ | ✅ | ✅ |
| Walrus | ✅ | ✅ | ✅ | ✅ |
| Libelle | ✅ | ✅ | ✅ | ✅ |
| Liasis | ✅ | ✅ | ✅ | ✅ |
| Margay | ✅ | ✅ | ✅ | ✅ |
| Okapi | ✅ | ✅ | ✅ | ✅ |
| Tally | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ MISSING |
| Standalone libraries | ||||
| MCP3421 | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ MISSING |
| NW_BME280 | ✅ | ✅ | ✅ | ✅ |
| NW_Core | ✅ | ✅ | ✅ | ✅ |
| DS3231 | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ MISSING |
| DS3231_Logger | ✅ | ✅ | ✅ | ✅ |
| MaxBotix_Library | ✅ | ✅ | ✅ | ✅ |
| T9602_Library | ✅ | ✅ | ✅ | ✅ |
| TP-Downhole_Library | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ MISSING |
| MS5803 | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ MISSING README |
| MCP23018 | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ MISSING |
| Bare repos | ||||
| VEML6030 | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ MISSING |
| VEML6075 | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ MISSING |
| TCA9534 | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ MISSING README |
| MCP4725 | ❌ MISSING | ❌ MISSING | ❌ MISSING | ❌ MISSING |
All rows pass or not applicable (column hidden): Pages enabled, moxygen remnants
| Row | HW: Schema 1: firmware | Schema 1: library | HW: Page 0 provisioned + tested |
|---|---|---|---|
| Apis | ◐ patch 2 on master 2026-09-22 (on-demand run model per #23; readings-requested word; STATUS-register readiness and busy polling; compiled for ATtiny1634; untested on hardware; sleep bit deferred) | ◐ series 4 on master 2026-09-22 (requires firmware patch 2; readings-requested word; one storage path; untested on hardware) | ❌ no (NW-Provision writes magic 0x4E as of ca3a64d) |
| Haar | ◐ done on master 2026-09-23 (patch 1: Page 0 from EEPROM with CRC; data at 0x28-0x35 in 0.01 units; writable rule, 0x1F persisted; 32-byte page reads; on-demand trigger, chip select, counter, live and latched faults incl. SHT31 checksum and LPS35HW timeout; address 0x42 -> 0x48); untested on hardware | ◐ done on master 2026-09-23 (NW_Core: begin() gates with min patch 1, default address 0x48, chip-group components, N readings with statistics, reading interface, faults, harness with baseline); untested on hardware | ❌ no |
| Walrus | ◐ Block 0 done on master 2026-09-23 (patch 1: Page 0 from EEPROM with CRC; writable rule, 0x1F persisted; 32-byte page reads; trigger or timer, chip select, counter, live and latched faults; batch word accepted, no effect); untested on hardware (#18) | ◐ done on master 2026-09-23 (NW_Core: begin() gates with min patch 1, chip-group components, N readings with statistics, reading interface, faults, harness with baseline); untested on hardware (#18) | ❌ no (#17 provisioning check; #18 hardware validation) |
| Libelle | ◐ done on master 2026-09-23 (patch 1, Libelle_Driver_ShortWave: Page 0 from EEPROM; data at 0x28-0x3D; writable rule, 0x1F persisted; 32-byte page reads; trigger or timer, chip select, counter, unit faults; addresses 0x4C UP / 0x0C DOWN); per-chip faults not yet; untested on hardware | ❌ MISSING (v2.0.0 planned; Project-Libelle #23) | ❌ no |
| Liasis | — | — | — |
| Margay | — | ❌ MISSING (no Page 0 read) | ❌ no |
| Okapi | — | ◐ on NW_Logger 2026-09-23: Page 0 read (Schema 0 fallback); Pages 2-3 per the hypothetical appendix; status file; untested on hardware | ❌ no |
| Tally | ❌ MISSING (fw 0.2.0 2019: 5-byte map; command bits at 0x00; address 0x33 hard-coded) | — | ❌ no |
All rows pass or not applicable (column hidden): HW: Spec appendix
| Row | HW: Last tag | HW: Commits past tag | HW: Eagle .brd | HW: KiCad .kicad_pcb | HW: KiCad verified vs Eagle | HW: Bug-labelled issues |
|---|---|---|---|---|---|---|
| Apis | v0.1.1 | 39 | 3 | 0 | — | 2 |
| Haar | v0.1.1 | 22 | 2 | 0 | — | 0 |
| Walrus | v0.3.0 | 27 | 3 | 0 | — | 2 |
| Libelle | v0.2.0 | 24 | 2 | 0 | — | 3 |
| Liasis | v0.2.0 | 2 | 1 | 0 | — | 0 |
| Margay | v2.2.2 | 97 | 1 | 1 | ❌ no (KiCad 7 import; BoM fields populated; not netlist-compared) | 7 |
| Okapi | v0.6.0 | 7 | 3 | 2 | ❌ no (KiCad 10 import; power nets and no-connects fixed; not netlist-compared) | 13 |
| Tally | v0.1 | 39 | 3 | 0 | — | 1 |
| Row | Next action | Notes |
|---|---|---|
| Devices | ||
| Apis | Bench (needs boards): provision with NW-Provision; flash firmware patch 2; Apis_Library Margay example on a Margay; scope one getRange() (mode-pin finding | |
| Haar | Provision Page 0 with NW-Provision; bench-validate firmware patch 1 with Haar_Library on NW_Core (address change 0x42 -> 0x48 breaks old sketches) | |
| Walrus | #17 provisioning check and #18 bench validation of firmware patch 1 with Walrus_Library on NW_Core | |
| Libelle | Libelle_Library onto NW_Core (harness first; the ADXL343 at 0x1D on the same bus needs a second device in the stub); capture chip acknowledges in the firmware for per-chip faults; bench | |
| Liasis | Decide on adding an MCU (#2) | |
| Margay | June review fixes in KiCad -> v3 tag; provision Page 0 · Tracking list Margay_Library #32: (1) BME.h -> NW_BME280.h + depends= [build break]; (2) Page 0 read (serial moves to Block 2) + spec fix; (3) sketch addresses; (4) #27/#31; (5) #7 faults | depends= should say NW_BME280 · hardware v3 release in progress |
| Okapi | Parallel thread: decide manufacturing source (KiCad-10 import vs Eagle) -> fix #15-#28 there -> ERC/DRC -> Gerbers -> v1.0 tag -> order · Compiles again (2026-09-23 | 5 library bugs filed 2026-06-02 (#3-#7); snapshot tag waits on hardware test · Prototype; current design is untagged Eagle v1.0 updates (2024-11-02) with CAM outputs |
| Tally | Andy to decide the proposed Tally appendix (spec README, 2026-09-23: monotonic uint32 count latched by the trigger, cap voltage at each latch, NOCAP as Config bit 0, address 0x54 inside the Okapi FRAM range); then firmware Block 0 on the ATtiny841 and the library onto Core · camelCase rename with aliases; category=; url=; CITATION.cff; .zenodo.json; doxygen_NW.cfg; docs.yml | Absent from spec / provisioning / registry / snapshot issue until 2026-09-20; library I2C support only on Dev_I2C branch (7 commits unmerged) |
| Standalone libraries | ||
| MCP3421 | Add [[deprecated]] PascalCase aliases; LICENSE; doxygen_NW.cfg; docs.yml; NW_MCP3421_Demo; bool begin(); then review and tag v2.0.0 | camelCase rename on master since 2026-09-20 push; needs [[deprecated]] aliases before v2.0.0 tag |
| NW_BME280 | Add .zenodo.json; review; tag v3.0.0 | |
| NW_Core | Apis, Walrus, Haar, T9602 on Core; Libelle firmware done, library next; Tally after its appendix; unversioned until the overhaul ends | Created 2026-09-23 from Apis series 4 per LIBRARY-DESIGN section 11; shared harness stubs and NW_TestSupport.h/run_library.sh live in extras/test; kept per library by decision: the forwarders (11a.6), field-named accessors, header/row text, demos |
| DS3231 | CITATION.cff; .zenodo.json; doxygen_NW.cfg; docs.yml (in registry already) | |
| DS3231_Logger | LICENSE; CITATION.cff; .zenodo.json; docs.yml; example; paragraph=; bool begin() | |
| MaxBotix_Library | TABLED until Haar and Walrus are done (Andy 2026-09-23); design saved (Apis-form surface on NW_Core's common layer; sketch-owned Stream port). Idea to weigh then: an ATtiny on MaxBotix-Helper making it a Schema 1 device like Apis | uncommitted Serial1 hack in src/ (deferred refactor; issue #4) |
| T9602_Library | Stale-bits fix + checklist files + Pages docs committed 2026-09-22 (12 commits; unpushed): set version= (last release 1.0.0; proposal 1.1.0); hardware test (bundle refresh is an end-of-overhaul step for all libraries) | tag v1.0.0 (2022) exists while library.properties says 0.0.0 |
| TP-Downhole_Library | Legacy: keep buildable; no standardization planned | legacy; lineage tracked under Walrus |
| MS5803 | README; CITATION.cff; .zenodo.json; keywords.txt; doxygen_NW.cfg; docs.yml; paragraph= | |
| MCP23018 | Rewritten 2026-09-23 (src/ layout; pinMode/digitalWrite/digitalRead/setInterrupt; MCP23018::Port; four fixes; harness on NW_Core stubs; unpushed): LICENSE check; CITATION/.zenodo; docs.yml + _docs + doxybook; still under NorthernWidget-Skunkworks | |
| Bare repos | ||
| VEML6030 | Bare: library.properties and full checklist if kept | |
| VEML6075 | Bare: library.properties and full checklist if kept | |
| TCA9534 | Bare: library.properties and full checklist if kept | |
| MCP4725 | Bare: library.properties and full checklist if kept |
python3 nw_status.py # scan the workspace and GitHub, then render
python3 nw_status.py scan # write nw_status_<date>.csv only
python3 nw_status.py render # render the latest dated CSV into this README and to _icons.pdf
The NW repositories are expected in the parent directory of this one, or in $NW_WORKSPACE if set. Rendering the PDF needs Google Chrome; without it the Markdown and the intermediate HTML are still produced. GitHub queries use the gh CLI.
Two repositories beside this one carry the tests the table reports on. NW-Tests compiles every sensor library inside a Margay and an Okapi sketch and runs each library's desktop harness. NW-Sim (private) runs a logger's firmware on a simulated ATmega1284P with the board hung off it – clock, card, on-board sensors, rails and bus switch – and, since 2026-09-24, a sensor's own firmware on a simulated ATtiny1634 answering the logger's library over a simulated two-wire bus. Neither replaces the bench; both replace finding out on the bench.
Almost every cell is derived from the working tree, git, the GitHub API, or the NW-Device-Specification text at scan time: required files, library.properties fields, tags, begin() return type, the common-API facets (including casing in two steps: camelCase conversion, then PascalCase removed), open and bug-labelled issues, uncommitted and unpushed state, design-file formats.
Cells that no scanner can read live in nw_status_manual.csv as Row,Column,Value and are merged over the scanned values: Schema 1 firmware and library state, hardware verification, next actions, notes. Edit that file when a hand-tracked state changes; rerun the scan for everything else.
nw_status_<date>.csv— one row per device (its library and hardware repo side by side) or per unpaired library; one fact or one check per column.- the report below, written into this README between markers — one table per thread of work, rows banded as Devices / Standalone libraries / Bare repos; a column in which every row passes or does not apply is hidden and listed under the table. Git history of this file is the dated record.
nw_status_<date>_icons.pdf— the master table with every column, group bands over the columns, one icon per cell (not committed; regenerate).
Dated CSV snapshots are committed so that the state on a given day can be recovered; the report itself lives below.
archive/ holds the May 2026 Library Manager readiness audits and their render script, which this tool supersedes.
GPL-3.0, see LICENSE.md. The dated CSV and Markdown reports are generated data about the NorthernWidget repositories, not creative works.
Held and not-yet-started work, with blockers: QUEUE.md.