# Changelog of Drug Label Diff Tracker (DailyMed) (`atlas-data/drug-label-diff-tracker`) Actor

- **URL**: https://apify.com/atlas-data/drug-label-diff-tracker/changelog.md
- **Full Actor documentation**: https://apify.com/atlas-data/drug-label-diff-tracker.md

## Changelog

All notable changes are documented here. The project follows semantic versioning; the dataset `schemaVersion` (currently `1.0.0`) bumps on any breaking change to the output record shape.

### 1.0.0 — 2026-08-25

Initial release.

- Watchlist of DailyMed SETIDs, NDC codes and RxNorm RxCUIs (bounded, validated, invalid input reported explicitly).
- Identifier → SETID resolution via the official DailyMed Web Services v2 `/spls` search (`ndc=` / `rxcui=`), deterministic newest-first ordering with per-identifier caps and reported truncation.
- Version detection via `/spls/{SETID}/history.json`; current label XML via `/services/v2/spls/{SETID}.xml`; prior versions via the officially documented `getFile.cfm` ZIP endpoint, extracted binary-safely (largest XML member, NUL guard).
- Conservative text normalization (NFC, zero-width removal, whitespace collapsing only) and LOINC-coded section extraction with nested-subsection folding and duplicate-key merging.
- Bounded line-level LCS diffs (prefix/suffix trimming, cell-budget fallback flagged as `degraded`), capped line payloads with exact counts, similarity and signed char delta.
- Conservative, fully auditable severity heuristic (`high`/`medium`/`low`/`unknown`) with reasons embedded per record; decision-support disclaimers and NIH/NLM/FDA attribution embedded in provenance.
- Two record types sharing one schema: `label_status` heartbeats (non-empty dataset guarantee for scheduled/example runs) and `section_diff` records with replay-stable IDs.
- Durable per-label snapshot state in a named KV store; write-before-state commit ordering; `maxItems` truncation withholds snapshots so truncated labels are re-checked next run (no silent skips); bounded state with rolling prune (2,000 labels).
- Politeness pacing (~1 req/s default), retry/backoff honoring `Retry-After`, request timeouts, response byte ceilings, per-label error isolation, all-failed-run hard failure with OUTPUT diagnostics.
- Complete `.actor` schemas (input prefill doubles as a bounded real-source Store health smoke), Dockerfile (multi-stage, reproducible `npm ci`), README, and 66 automated tests (unit, integration, adversarial, schema) plus `SMOKE=1` live-source tests.
