All entries
Changelog

Letter pages, Pulse adapter fixes, and the writer is ready

Three ships this week. The Weekly Market Letter has its public home. The Pulse data layer got a real observability gate. The auto-draft writer fires its first run next Monday.

May 1, 20263 min read
letterpenduluminfrastructureobservability

Three ships this week. The first Weekly Market Letter goes out next Monday.

What shipped

Weekly Market Letter pages live at /letter. The public-facing rendering layer is in place. Index page lists every published Letter newest-first. Each Letter gets its own page with full Schema.org Article markup, fact citations rendered in a Sources section, and ClaimReview structured data so AI engines can cite the data points back to the original source. RSS feed at /letter/rss.xml for power users and journalists. Header nav and footer both link to the Letter index.

The first Letter is a stub explaining what's coming. The real first issue lands next Monday.

Pulse adapter fix. The first scheduled run of the Pendulum Weekly Pulse pipeline came back with empty data because three adapter URLs were guesses, not verified. We fixed it.

The post-mortem: Redfin's weekly TSV path didn't match what we tried. Realtor's S3 keys returned 403 across three URL guesses. MBA's news-search endpoint is JS-rendered now and the old URL was dead. The defensive try/except → return {} pattern on each adapter caught every error and returned empty, but the workflow exited green and the merge gate didn't catch the silent-empty failure.

Two adapters dropped (Redfin Weekly, MBA Weekly) because no public, scrape-friendly weekly source exists for them. Realtor Weekly fixed with a verified URL. The Pulse banner now renders with three live Realtor weekly tiles plus the FRED mortgage rate tile.

The genius part: an observability layer landed alongside the fix. Adapters now write actual error messages to a pendulum-pipeline-errors.log artifact uploaded on every workflow run, and the orchestrator fails the build if more than half the weekly sources return empty. Silent failures fail loudly now.

MFD orchestrator with brief-review UI. The auto-draft pipeline that drafts the Weekly Market Letter every Sunday night is operational. The Letter cron fires Monday 8 AM Sydney, right after the Pendulum data refresh. The first auto-drafted Letter shows up in the brief-review queue next Monday morning. Approve it, ship it, and the Letter publishes to its /letter page on this site.

What it means

The full content engine is in place. By next Monday morning Sydney time, the loop runs end-to-end without manual data work:

  • Sunday 22:00 UTC: Pendulum data refresh runs, weekly_macro populates with Realtor weekly + FRED mortgage rates
  • Sunday night Sydney: MFD orchestrator drafts the first real Weekly Market Letter from fresh data
  • Monday 8 AM Sydney: Letter cron fires, draft lands in the review queue
  • Review and approve the draft in the MFD dashboard
  • Letter publishes to /letter/[slug] on the live site
  • Email goes out via the existing nurture-drip Resend integration
  • LinkedIn carousel, Twitter thread, and Reddit anchor content generated for manual paste

That's the full Monday morning routine, end to end, in less than seven days.

What's coming next

The first real Weekly Market Letter, drafted by the orchestrator from this Sunday's fresh Pendulum data. After that the content engine is on autopilot every Monday for as long as we want to run it.

What we learned

Defensive code without observability is silent failure. The try/except → return {} pattern is correct for resilience, but it has to be paired with error capture and a CI-level failure gate. Otherwise you get green builds that produce empty data and the failure surfaces only when a human notices. The real lesson is that any defensive pattern needs an exit ramp where errors can be seen and acted on.

URL guesses don't survive contact with reality. Three of three adapters failed on first contact because nobody verified the URLs against the live sources. The fix was 30 minutes of opening official sites and copying the canonical link. Spec docs that say "verify URL" must mean it.

The mailbox before the mail. Building the public Letter pages before the auto-draft skill ships meant when the first real Letter is ready, it has somewhere to live. Sequencing matters more than scope.