Skip to main content
Paul Welty, PhD AI, WORK, AND STAYING HUMAN

What shipped today Two themes: a codebase scout pass that found the critical effect wiring gap, then shipping every finding.

The session started with a systematic scout of the entire codebase — 12 findings across bugs, tech debt, and maintenance. The critical finding was that the new effect blocks (deposits, tech grants, research options) added yesterday were defined in EFFECT_BLOCKS but never wired into the roller’s pattern structures. Generated events would have looked identical to before the “make events fun” work — the new effects existed in code but had no path to actually appear in rolled options. The scout also caught stale DISABLED comments, a TODO placeholder leaking into player-facing mod output, vanilla reference data missing from .gitignore, and no automated check for the config drift that previously caused 100% generation failure.

All 5 scout issues shipped in a single session. The effect wiring fix (#192, PR #200) expanded tradeoff_trio to randomly select gains from the full pool (research, resources, unity, deposit, tech_give, tech_option) and randomized risk_spectrum to sometimes use deposits (30% safe), tech options (30% medium), and tech grants (40% high). Verified with 100 rolls: give_technology ~49, add_deposit ~44, add_research_option ~37 — the new effects appear at healthy rates alongside existing types. The config drift test (#193) adds 5 tests that cross-check outcome template ranges against the roller’s actual output, catching the class of misalignment that previously broke generation entirely. The three cleanup issues (#194, #195, #196) removed stale comments, fixed the modifier TODO fallback, and gitignored the vanilla reference data.

Completed

  • #192 Wire new effect blocks into roller pattern structures (PR #200)
  • #193 Add config drift validation tests (PR #201)
  • #194 Clean up stale DISABLED comments in situation rendering (PR #197)
  • #195 Fix modifier TODO placeholder fallback in rendered mod output (PR #198)
  • #196 Add vanilla reference data to .gitignore (PR #199)

Release progress

  • v1.5: 11/11 closed — complete
  • v2: 5/5 closed — complete
  • Both milestones fully closed. Only #179 (backlog) remains open.

Carry-over

  • Run a fresh playtest with the new effect wiring — this is the real validation that deposits, tech grants, and research options actually appear in-game and feel meaningful
  • The pre-existing test failure in test_render_lint_integration.py (stale playtest_fixed sprites) should be cleaned up — delete data/releases/playtest_fixed/ and its integration test reference

Risks

  • The new effect wiring randomizes gain types using random.sample() from a pool of 6. This means some runs may not include any deposits or tech effects — they’re probabilistic, not guaranteed. A playtest may need multiple generates to see the full range.
  • add_deposit uses the SCOPE_FROM: prefix convention for planet scoping. This hasn’t been tested in Stellaris yet — the Clausewitz syntax is correct per vanilla analysis but rendering integration is unverified.
  • The give_technology effect doesn’t guard against the player already having the tech. If they do, the effect is wasted silently. Vanilla events have the same behavior in some cases.

Flags and watch-outs

  • PR #200 is the 200th PR on this project
  • The board is essentially empty: 1 backlog issue (#179). Consider whether v1.5 and v2 milestones should be formally closed since all their issues are done.
  • 267 tests passing (up from 258 at start of yesterday)
  • The vanilla events/ and common/ directories are now gitignored but remain on disk for analysis

Next session

  1. Generate a fresh playtest release — verify new effects (deposits, tech grants, research options) appear in the generation log
  2. Render with normal pacing, lint, load in Stellaris
  3. Playtest: do the new visible effects make choices feel more meaningful? Are deposits appearing on planets? Are tech grants working?
  4. If the playtest passes, close out v1.5 and v2 milestones formally
  5. Clean up the stale playtest_fixed integration test reference
  6. Plan the next milestone — what’s the next batch of work? (The product vision in PRODUCT.md may need updating based on playtest results)

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 org chart your agents need

The AI community is reinventing organizational design from scratch — badly. Agencies figured this out decades ago. Competencies, not clients. Briefs, not prompts. Lateral communication, not hub-and-spoke. The answers are already there.

AI agents need org charts, not pipelines

Every agent framework organizes around tasks. The agencies that actually work organize around competencies. The AI community is about to rediscover this the hard way.

The delegation problem nobody talks about

When your automated systems start finding real bugs instead of formatting issues, delegation has crossed a line most managers never see coming.