It might be worth revising the operation of genLoopPackets() and genArchiveRecords(), in particular when running under hardware and software record generation.
The task of genLoopPackets() is to emit loop packets and these packets are processed and accumulated by WeeWX. The accumulated loop packets can be used to (1) synthesise an archive record at the end of the archive interval (which is ultimately saved to database in the archive table) and (2) if loop_hilo is True update the daily summary tables. On the other hand the task of genArchiveRecords() is to emit, when asked, archive records which are processed by WeeWX and ultimately saved to database in the archive table and used to update the daily summary tables.
If you are using software record generation then WeeWX never asks the driver to emit archive records, instead WeeWX takes the accumulated loop packet data received during an archive interval and synthesises an archive record. This archive record is saved to database in the archive table.If loop_hilo is True the daily summary tables are updated using the accumulated loop data. In other words the driver just continually emits loop packets and WeeWX does the rest.
When using hardware record generation the driver continues to emit loop packets, and WeeWX continues to accumulate them; however, at the end of the archive interval instead of synthesising an archive record WeeWX asks the driver for an archive record. Since the driver has a genArchiveRecords() method an archive record is emitted by the driver and WeeWX takes that archive record and ultimately saves it to database in the archive table. WeeWX will use the archive data and, if loop_hilo is True, the accumulated loop packet data, to update the daily summary tables (note that no archive record is ever synthesised by WeeWX, the only archive record that exists comes from the driver). There is one more aspect to WeeWX operation when hardware record generation is selected. WeeWX asks the driver for an archive record by calling the genArchiveRecords() method, if that call fails then WeeWX falls back to software record generation (ie WeeWX synthesises an archive record from the accumulated loop packets). So even though you have set hardware record generation WeeWX will still function properly with a driver that does not support hardware record generation (ie it has no genArchiveRecords() method).
Back to your situation. When you have genArchiveRecords() enabled you say that "The driver sees the data and according to some logging it passes it to
weewx just fine, but for some reason weewx seems to be silently ignoring
the data, it is never added to the database with no indication why in
the logfile." What do you mean by this, or what are you expecting to see? If you are using hardware record generation (you must be if genArchiveRecords() is being called) then WeeWX will never save the loop packet data to the archive table in the database, it saves the archive record emitted by genArchiveRecords() to the archive table in the database. WeeWX only uses the loop packet data to update the daily summary tables. Did you look at the daily summary tables, are the highs and lows and timestamps being updated with loop data?
When you disable genArchiveRecords(), even though you have hardware record generation set, the call to genArchiveRecords() fails and WeeWX automatically falls back to software record generation where WeeWX synthesises an archive record and saves that archive record to the archive table in the database.
From your description above it is quite possible that WeeWX and your driver is working exactly as intended, it might not be, but I think you will need to look at bit deeper to show this.
Gary