Paul Welty, PhD AI, WORK, AND STAYING HUMAN

Work log: periodic tasks and social pipeline hardening

What shipped today

Paulos now has a proper periodic task framework. Three CLI commands — paulos sentry triage, paulos issue stale, and a refactored paulos social run — can run headless from launchd on an hourly or daily cadence. Each has a core module with no Click dependency, so the same logic works from the CLI, from launchd, or from any future orchestrator.

The Sentry triage command fetches new and regressed issues across all configured workspaces, deduplicates against existing GitHub issues using HTML comment markers (<!-- sentry:SHORT_ID -->), and creates new issues with full context. The stale issue detector flags anything untouched for 14+ days with a stale label. Both support --project filtering and --dry-run.

The social pipeline got two important fixes. First, it was pointing at the podcast RSS feed (polymathic.xml) instead of the blog feed (index.xml) — now corrected. Second, it closes the teasing loop: after pushing blurbs to Authexis, the pipeline adds a teased tag to the post’s frontmatter in polymathic-h, commits, and pushes. The RSS feed then includes <category>teased</category>, which any tool watching the feed (including the pipeline itself) uses to skip already-teased posts. The local state file is the primary dedup gate; the RSS tag is the external-tool-friendly secondary signal.

Also fixed two longstanding bugs: set_labels() in gh.py had a fallback comment with no actual fallback code (labels silently dropped on API failure), and several deploy scripts referenced CLI commands that never existed (paulos eod, paulos orchestrate, paulos bot). The dead deploy/launchd/ directory was removed and bootstrap-mini.sh was rewritten to use the new launchd/install.sh.

Completed

  • #177 — Add periodic CLI commands: sentry triage, issue stale, social pipeline refactor
  • #178 — Add teased tag flow to social pipeline
  • #179 — Add –blurbs option to social generate and social run
  • #172 — Fix broken deploy scripts: nonexistent CLI commands and wrong GitHub URL
  • #173 — Fix broken fallback in gh.py set_labels

Release progress

  • March 2026: 15/15 closed (due 2026-03-30)
  • April 2026: 0/2 closed (due 2026-04-30)

Carry-over

  • launchd plists are written but not yet installed on any machine. Run ./launchd/install.sh to activate.
  • The social pipeline’s teased-tag commit+push depends on polymathic-h being cloned locally at ~/Projects/polymathic-h. Works on the laptop; needs verification on the home server.

Risks

  • The Sentry triage dedup searches GitHub issues with --search using the HTML comment marker as the query string. If GitHub search indexing lags, there’s a small window for duplicate creation on rapid successive runs. The hourly cadence makes this unlikely in practice.

Flags and watch-outs

  • The GA4 dashboard cards work (commit 392afba from earlier today) hasn’t been tested end-to-end with a real CoS briefing yet.
  • social run now imports from social_pipeline.py at call time (lazy import) — works but means import errors won’t surface until the command is actually invoked.

Next session

  • Run paulos sentry triage and paulos social run end-to-end (not dry-run) to validate the full loop.
  • Install launchd agents on the laptop (./launchd/install.sh) and verify they fire correctly.
  • Start on April milestone: #160 (background mode for skills) is the bigger architectural piece; #119 (Authexis content services) is more exploratory.

Why customer tools are organized wrong

This article reveals a fundamental flaw in how customer support tools are designed—organizing by interaction type instead of by customer—and explains why this fragmentation wastes time and obscures the full picture you need to help users effectively.

Infrastructure shapes thought

The tools you build determine what kinds of thinking become possible. On infrastructure, friction, and building deliberately for thought rather than just throughput.

Server-side dashboard architecture: Why moving data fetching off the browser changes everything

How choosing server-side rendering solved security, CORS, and credential management problems I didn't know I had.

The work of being available now

A book on AI, judgment, and staying human at work.

The practice of work in progress

Practical essays on how work actually gets done.

The loop nobody bothers to close

Most systems observe. Almost none learn. The difference is a feedback loop — and the boring cleanup work that makes it possible.

Your process was built for a different speed

When work changes velocity, governance systems don't just fall behind. They become theater. And theater is worse than nothing—it gives you the feeling of control without any of the substance.

The difference between shipping and finishing

Shipping is mechanical. Finishing is a judgment call. And most organizations have quietly made it impossible to tell the difference.