2026-02-28 — Module splits, queue cleanup, CI pipeline
What shipped today
The big story today was structural: four large monolith modules got split into focused packages via a coordinated grind. core/github.py (1,233 lines), commands/podcast.py (1,154 lines), core/briefing.py (865 lines), and the shared dataclasses in core/linear.py all got decomposed into sub-packages with clear separation of concerns. The types extraction was the keystone — it removed a dependency inversion where github.py imported from linear.py for types that weren’t Linear-specific. After that landed, three parallel agents ground through the remaining splits while the fourth waited for its dependency.
The grind pipeline got a real workout: two waves of parallel agents (3 + 1), all shipping clean on the first pass. The adversarial dev/QA/review loop caught no issues because the specs were tight — detailed file lists, function inventories, backward-compat requirements. Good specs make good grinds.
Beyond the splits, the session was heavy on queue hygiene. Started with 16 open issues, ended with 3. The eod reflect bug cluster (#133-136) turned out to reference code deleted in the skills refactor — closed all four as already resolved. README got rewritten to reflect the skills-first architecture. PRODUCT.md got its last stale paulos blog idea reference fixed. CI pipeline added (GitHub Actions, pytest on 3.11/3.12). Several stale issues closed (pytest deps already done, docs index no longer needed, duplicate COS issue).
Also cleaned up the polymathic-h .claude/skills/ directory — 32 stale symlinks from the old per-project pattern. All projects now defer to ~/.claude/skills exclusively.
Completed
- #146 — Rewrite README.md to reflect skills-first architecture
- #121 — Split large modules into sub-packages (decomposed into #156-159)
- #156 — Extract shared dataclasses from linear.py into core/types.py
- #157 — Split core/github.py into sub-modules (transport/milestones/issues/content)
- #158 — Split core/briefing.py into scanners, email, and orchestration
- #159 — Split commands/podcast.py into generation, content, and CLI layers
- #147 — Fix PRODUCT.md references to deleted command groups
- #125 — Add CI pipeline for automated test runs
- #133 — Prevent stale cache from overriding AI reflection input (closed: code deleted)
- #134 — Align eod reflect defaults (closed: code deleted)
- #135 — Fix logging setup re-init (closed: code deleted)
- #136 — Isolate eod reflect cache usage (closed: code deleted)
- #124 — Make pytest a required dev dependency (closed: already done)
- #126 — Add documentation index (closed: docs archived)
- #141 — Enhance COS briefings (closed: duplicate of #140)
Carry-over
- #119 — Authexis content services for blog posts (needs exploration/design)
- #140 — Enhance COS for useful automated briefings (too big, needs decomposition)
- #160 — Background mode for /prep, /exec, /grind skills (new, needs design)
- Polymathic-h agents symlink still points to
../../utilities/.claude/agents— check if that’s current or stale
Risks
- The module splits changed import paths. Everything re-exports via
__init__.pyfor backward compat, but if any caller was doing deep imports (e.g.,from paulos.core.github import _github_apidirectly), it could break. CI pipeline will catch this going forward. issues.pyin the github package is 691 lines — close to the 600-line target.create_issuewas added to it during the split; if more issue operations are added it’ll need another split.
Flags and watch-outs
- February 2026 milestone closes today. 3 remaining issues (#119, #140, #160) should either ship today or roll to March.
- CI pipeline is live — first push to main after this will trigger it. Watch for failures from dependencies that need system packages on Ubuntu (e.g., playwright, system libs).
Next session
- Decide milestone: roll #119, #140, #160 to March or close/defer
- Decompose #140 (COS briefings) into grindable sub-issues if keeping it
- Check CI pipeline results from today’s push — first run, may need fixes
- Run
/reflectfor today’s work
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 silence that ships
Three projects independently discovered the same bug pattern today — code that reports success when something important didn't happen. The most dangerous failures don't look like failures at all.
When your work moves faster than your rules can keep up, governance quietly becomes theater
I want to talk about something that happened this week that looks like a technical problem but is actually a management problem. And I think it maps onto something most organizations are going to f...
Junior engineers didn't become profitable overnight. The work did.
We've been celebrating that AI made junior engineers profitable. That's not what happened. AI made it economically viable to give them access to work that actually builds judgment, work we always knew