# Changelog of Public-Safety Hiring Alerts (`dan8433/public-safety-hiring-alerts`) Actor

- **URL**: https://apify.com/dan8433/public-safety-hiring-alerts/changelog.md
- **Full Actor documentation**: https://apify.com/dan8433/public-safety-hiring-alerts.md

## Changelog — Public-Safety Hiring Alerts

### 2026-08-12 — v0.1 (initial build)

- **What:** New Apify actor, Product #2 in the Arcaeon portfolio. Generalizes the
  internal `bridge/ascenvo/recruitment_watch.py` engine (CA-dispatcher-only) into a
  parameterized watcher: five role families (dispatcher / police / fire / corrections /
  EMS), any state or nationwide, pay-per-result (one item per open posting).
- **Why:** The build reassessment (2026-08-12) named the public-safety domain suite as
  our least-copyable edge — Daniel's own field, tools already built, insider credibility.
  Hiring alerts is the fastest-to-market slice of it: marketplace-publishable and
  genuinely useful the week any agency opens hiring.
- **Design:** SDK-free (pure stdlib — urllib/re/html), mirroring the verified-snapshot
  actor. `src/watch.py` is the pure, locally-testable core; `src/main.py` is the actor
  wrapper reusing the proven env-fallback + `.rstrip("/")` fix that solved the internal
  proxy double-slash 404. Role families carry both a search keyword and a title-match
  regex to keep out look-alike noise (fleet dispatcher, records clerk).
- **Verified:** core tested live — 27 real open postings parsed across dispatcher/police/
  fire in CA, HTML entities unescaped, family classification correct.
- **Open:** push to Apify + build; then (Daniel's account) set pay-per-result pricing and
  flip public. A second source beyond governmentjobs.com is a later coverage add.

### 2026-08-12 — v0.1.1 DEPLOYED + verified live on Apify

- **Pushed and built** on Daniel's Apify account (Dan8433, FREE plan) via `apify push`.
  Actor ID `D6dqtGiepmZh2Zbuf`, build 0.1.1, SUCCEEDED.
- **Verified running end-to-end on the platform** (not just built): live run
  (Run ID `KwYUN1a6Jew5H7UEi`) with input `{roleFamilies:["dispatcher"],states:["CA"],
  maxFetches:1}` returned 9 real open dispatcher recruitments, pushed to dataset
  `8godu9vfiL4rPj7IW` with the full correct schema. Em-dash/entity rendering clean on
  Linux/UTF-8. This is the hollow-verification guard cleared: the real side effect
  (dataset items) confirmed, not just the build status.
- **CLI note:** apify-cli wasn't installed; `npm install -g apify-cli` (v1.8.0), then
  `apify login -t <token>` (token now in `.env` as APIFY\_TOKEN + OS keyring). Token
  retrieved by Daniel via a scoped Claude-Chrome prompt; verified against the account
  before use.
- **Remaining to revenue (Daniel's hands only):** Apify monetization enrollment —
  payout + tax details — is the gate before paid pricing can be set and both actors
  flipped public to the store. Not automatable (his financial/identity info).
