Note: there is no git history for this folder. Entries 0.3.1–0.3.7 are rebuilt from the code, the deploy notes (biddelta-launch/STORE_LISTING_CHANGES.md) and the build history. Apify build numbers inside version 0.3 are listed together where they weren't separate releases.
Unreleased (prepared Oct 15, 2026; not deployed)
Oct 19, 2026 test battery fixes (see /workspace/test-battery-2026-10-19.md):
Every alert now shows old → new values: title, NAICS, PSC, notice type, solicitation number, set-aside (full names), contacts, place of performance, award amount/date/awardee, description (added/removed text), removed attachment names, and deadline shifts in hours.
One failing or slow notice no longer kills the whole watchlist run. Other notices still alert, and the failing one is reported as "SAM.gov didn't answer" (separate from "not found"). Each notice gets a 20 s timeout with 3 attempts, and the watchlist has a 25-minute budget.
Duplicate watch entries are fetched once. Entries over 300 characters are rejected as invalid instead of causing an HTTP 414 that killed the run.
A corrupted or partly corrupted saved state (string, array, null maps, junk notices) is repaired or re-baselined with a warning instead of crashing.
Slack messages escape &, < and >. The .ics feed folds lines at 75 bytes without splitting emoji, and cancelled notices get STATUS:CANCELLED with a "CANCELLED:" title.
Run OUTPUT adds unreachableWatch and stateReset.
New tests: test/battery-2026-10-19.test.js (45) plus test/helpers/.
Clearer message when watched entries can't be found. The "No changes" status row now lists them, with a hint to paste the full link. They still don't fail the run.
Clearer failure message when SAM.gov is down or rate limiting. It says the saved baseline was not changed and that it's safe to run again.
README Troubleshooting covers "not found", SAM.gov outages and quiet first runs. The watch input description says that entries that can't be found don't fail the run.
New tests: test/launch-edges.test.js (HTTP 404 → unresolved, 5xx → retried and then the run fails, message helpers).
0.3.7 (Oct 14, 2026): current latest / beta-candidate
Fixed the dataset schema mismatch that broke builds 0.3.4 and 0.3.5: Apify rejected rows that weren't in .actor/dataset_schema.json. The schema now accepts both rowType: change events and the rowType: run_status "no changes" row, including unresolvedWatch.
Added test/dataset-schema.test.js, which checks every row type with the same validation the platform uses.
package.json version set to 0.3.7.
0.3.4–0.3.6 (Oct 14, 2026)
Builds 0.3.4 and 0.3.5 failed at runtime with a dataset schema validation error on pushData (fixed in 0.3.7). Do not use these builds.
Default memory set to 256 MB. Store-facing README and input schema prepared (quickstart first, "No API key").
0.3.1–0.3.3 (Oct 14, 2026)
Alert channels moved from the 0.3.0 notifications object to flat, encrypted input fields (the old object is still accepted).
Added channels: Microsoft Teams (Adaptive Card), Discord, Telegram, ntfy, Pushover, SMS (Twilio or Telnyx, bring your own account), Google Sheets and Google Calendar (Apps Script), a subscribable .ics deadline feed, plus severity floors (alertMinSeverity, smsMinSeverity) and notifyWhenNoChanges.
Hardening: 429 Retry-After handling, unreadable attachment lists are never reported as "all removed", a 500-attachment cap, and archived or cancelled notices.
0.3.0 (Oct 14, 2026)
Notification channels: email, Slack, Microsoft Teams (Adaptive Card), Discord, Telegram, ntfy, Pushover, SMS (Twilio or Telnyx, bring your own), Google Sheets (Apps Script), Google Calendar (Apps Script), subscribable .ics deadline feed, generic webhook. Per-channel isolation, secrets redacted, severity floors.
Hardening: 429 Retry-After handling, unreadable attachment lists never reported as "all removed", 500-attachment cap, archived and cancelled notices, clear input errors, long-dated sample notice.
No-API-key live monitoring (sourceMode: public/auto) using sam.gov's public notice JSON. The official API key mode still works.
Paste solicitations to watch (watch): URLs, notice IDs or solicitation numbers. This is now the primary input. Unresolved entries are reported and their state is carried forward.
Attachment change detection: new, replaced (same name, new file) and removed attachments, plus description-text edits and explicit cancellations.
Plain-English summaries on every change (free, deterministic). Optional AI rewrite with the user's own OpenAI-compatible key (openaiApiKey, default gpt-4o-mini).
Alerts: email (apify/send-mail), Slack incoming webhook, and a generic https webhook (Make, Zapier, n8n). Sent only on changes by default. Delivery failures never fail the run.
Simplified input:mode (Monitor / Try a sample alert), with legacy fields moved under Advanced. Existing v0.2 tasks run unchanged.
"No changes since last run" status row and an OUTPUT flag, so quiet runs don't look broken.
Schedule preset with cron line and estimated monthly Apify cost in OUTPUT.schedule.
Sample mode now shows a realistic one-run amendment instead of a synthetic new-match.
Default memory raised from 128 to 256 MB. Public searches return the newest 25 matches, and capped results are carried forward rather than marked missing.
Changelog
0.1 — Free public beta candidate
Added official SAM.gov public API source adapter.
Added rolling and fixed search windows.
Added normalized snapshot and material-change comparison.
Added deterministic event IDs and source-linked decision cues.
Added metadata-only attachment boundary and query-string stripping.
Added fail-closed truncation and non-cancellation missing semantics.
Added durable output and future billing outbox.
Added same-run idempotent charge retry and restart recovery.
Added terminal-run charged-event reconciliation and proof-based cross-run
retry when the prior run proves no charge was accepted.
Added budget-before-projection and stop-on-uncertainty billing gates.
Added encrypted samApiKey input with private environment-secret fallback.
Added Actor input, dataset, and output schemas.
Added fixture and read-only live probe modes.
Added beta metrics, pilot, release, and operations documentation.
Made the Store try-it input a complete no-key fixture demonstration.
Prohibited paid fixture runs and forced official API baselines to remain
non-emitting even if the input toggle is changed.