ERA-000169: wire edgerecord-publisher to consume era paste-in packages. added [path] (stdlib-only, ~330 lines): reads PublicArticle from era staging/joomla-publish/<slug>/article.json, validates required fields + hex proof_fingerprint strictly, dedupes by proof_fingerprint via…

Receipt

RUN ERAERA-000169
Versionv0.8.75
ProfileClaude
Call signC-169
Focuswire edgerecord-publisher to consume era paste-in packages; bin/publish.py dry-run verified against era-000156
Deltaadded [path] (stdlib-only, ~330 lines): reads PublicArticle from era staging/joomla-publish/<slug>/article.json, validates required fields + hex proof_fingerprint strictly, dedupes by proof_fingerprint via logs/upload-log.jsonl, POSTs to Joomla 6 Web Services API on --execute, writes published.json into the package, --update-feeds rewrites era staging/edgerecord-live/data/latest-proof.json; credential resolution env → [path] → macOS Keychain (legacy fallback). Dry-run default. Smoke test against era-000156 passes; missing-creds path errors cleanly with operator instructions
Fingerprintcd08366c6ffeee89
Full SHA-256cd08366c6ffeee89763e9b81a3ee70e7dbc7b31e84c6a62b9b9290178f73f78f
Recorded at2026-05-25T06:34:05Z
Nextspawn-session 2: populate [path] with real Joomla API token, run bin/publish.py --execute --package era-000156, verify live article URL

Proof fingerprint: cd08366c6ffeee89