Release v3.14.0-beta.3
Pre-release
Pre-release
Added
verify_diagnosticscatalog tool. Pure function plus thin CLI
incable_modem_monitor_catalog_toolsthat takes an HA diagnostics
JSON and a release tag and produces a properly-shaped
verified.jsonfixture (HA wrapper unwrapped, integration extras
stripped,verified_at/versionprepended, channel arrays
rendered compact, multi-variant paths resolved). Replaces the
hand-rolled python heredoc previously used at confirmation time
with a deterministic, tested transform. Imports
SYSTEM_INFO_FIELDSandcanonicalize_channel_keysfrom the
core registry to keep the field-list and channel-key-order
truth in one place. Maintainer-facing; no end-user impact. See
MODEM_INTAKE_WORKFLOW.md§ Confirmation Phase.json_transposedparser format. New format for modems that
expose channel data as transposed JSON tables (rows are fields,
columns are channels). Lives incore/parsers/formats/alongside
the existinghtml_table,xml, andjson_tableformats and
registers through the centralized format registry so new formats
compose in additively. Surfaces to contributors via modem.yaml
format:selection.
Fixed
- Auth failure logs now surface response detail across all
strategies._log_auth_failure_detail(collector.py) reads
auth_result.responseto emit sanitized request line + response
status/Content-Type + body snippet on auth failure. Six strategies
(form_pbkdf2,form_sjcl,form_cbn,form_nonce,hnap,
url_token) plus the sharedparse_json_dicthelper now populate
response=on failure paths where arequests.Responseis in
scope; previously onlyformdid, so contributors triaging auth
failures on any other strategy saw the no-response one-line
fallback. Related to #120 (CGA6444VF — first real-world test of
form_pbkdf2). - Stale HNAP sessions now recover within the same poll. When a
cached HNAP session is rejected by the server (LOAD_AUTH on
HTTP 401/404), the orchestrator clears the cached session and
retries collection once in the same poll instead of surfacing a
transientauth_failedstate. Affects modems whose firmware
expires sessions faster than the configured poll interval (e.g.,
Arris S33 with sub-10-minute auth timeout). Related to #140. - Adaptive session reuse disable for chronically short-TTL
firmware. After 2 consecutive recovered same-poll LOAD_AUTH
events, the orchestrator stops attempting cached-session reuse for
the rest of the runtime and starts each poll with a fresh login.
An intervening normal successful poll resets the recovery streak.
Runtime-only —reset_auth()or process restart re-enables reuse.
Surfaces in diagnostics asstale_session_recovery_streakand
session_reuse_disabled. Strategy is intentionally not exposed
as a per-modem yaml field (per the "no per-modem recovery tuning"
principle).
Changed
load_post_processormoved out ofcore.test_harness.runnerto
its own module,solentlabs.cable_modem_monitor_core.post_processor.
The function is a runtime extension-point loader (peer of
load_parser_config), used by HA's setup path to import per-modem
parser.pyfiles. It was placed intest_harness/only because the
test runner was the first caller; HA picked up the same import path
when it needed the function later. Internal-only change — no behavior
change for end users.- Orchestrator diagnostic field renamed:
last_poll_timestamp→
last_poll_at. The old field storedtime.monotonic()under
a name that strongly implied wall-clock time but is actually
process-uptime seconds — useless for "when did the user test"
inspection of archived diagnostics. New field stores
datetime.now(UTC).isoformat()and means what its name implies.
Visible incore_diagnosticsof HA diagnostics downloads. Zero
consumers of the old field existed, so this is a clean rename.
Existing committedverified.jsonfixtures retain the old name
by the point-in-time-snapshot rule; new confirmations get
last_poll_at. - Logging contract: quiet on success. Parse-complete and other
success-path orchestration logs fire at INFO on the first poll
(fresh install, reconfigure, HA restart, reauth) and drop to DEBUG
in steady-state. Operator-relevant transitions (status changes,
adaptive-reuse state changes, counter resets) stay at INFO
regardless of poll count. The integration's startup INFO line tells
users where to enable DEBUG logging for per-poll detail. Liveness
can be confirmed without DEBUG via the Diagnostics download
(includeslast_poll_at, streak counters, reuse state) or the
integration page activity log. Multi-modem setups previously
produced 144 INFO lines/day per modem; now produce one verbose
startup block plus transitions. - Catalog chipset metadata filled for Hitron CODA56 (Broadcom
BCM3390) and Compal CH7465MT (Intel Puma DHCE2652, MTAT ISP).
Affects badge rendering in the catalog README.
Confirmed
- Hitron CODA56 — BCM3390, form auth, Comcast/Xfinity. Closes #89.
- Netgear CM1200 (basic-auth variant). The form-auth variant
remains awaiting verification (different contributor, different
conditions).
What's Changed
Full Changelog: v3.14.0-beta.2...v3.14.0-beta.3