feat: CMS rulemaking comment analysis module (regulations.gov) #251
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Objective
Build a module for downloading, extracting, and analyzing public comments on CMS rulemaking dockets, starting with the skin substitute reclassification rules.
Reference project: jacobmr/hti5 — ONC HTI-5 comment analysis (298 comments, position classification, thematic analysis, coordination detection, provision mapping).
Target Dockets
Pipeline (modeled on hti5)
Architecture
src/rex/comments/(orsrc/cms/comments/)stack comments fetch <docket-id>,stack comments analyze,stack comments reportskin_subs.rulemaking_commentsin DuckDB, items in bib.sqliteKey Insight from hti5
Backfill perf update — commit
22cbc74downloads.regulations.gov, 4 workers) — they don't count against the API rate limitbib-backfill-comments.servicerestarted on the new code at 09:33 EDTProgress: ~34,948 / 56,568 enriched (~62%). Sustained ~14 items/min post-restart; API pacing is no longer the bottleneck — attachment download time is. Errors steady at 7 in this run (1120 lifetime, mostly older dockets).
Attachments land in
.state/comments/{docket_id}/{comment_id}/, ready for the #253 extraction pipeline.Closing the umbrella — the pipeline's foundation is shipped and the remaining analysis stages have their own open issues carrying all the detail:
stack bib backfill-comments(regulations.gov API, comments + attachments); ~164ksource:regulations-govitems in bib, routed to ZoteroRules/Comments/<docket>collections (https://git.fhirworx.io/homelab/stack/commit/c53571c), including the target dockets.src/rex/comments/, combined.md per comment in Zotero.The
skin_subs.rulemaking_commentsDuckDB table already exists with the full column schema for those stages (position, position_score, themes, stakeholder_type, coordination_group, is_form_letter, provisions) but only a 15-row pilot — the at-scale runs are what #254–#256 track.