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.shto 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
--searchusing 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
392afbafrom earlier today) hasn’t been tested end-to-end with a real CoS briefing yet. social runnow imports fromsocial_pipeline.pyat call time (lazy import) — works but means import errors won’t surface until the command is actually invoked.
Next session
- Run
paulos sentry triageandpaulos social runend-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.