2026-03-14
What shipped today
Today was about turning a finally-playable Phantasmagoria build into something we can trust and explain. The key shift was architectural: instead of letting the generator implicitly define what “valid” YAML means, I locked the project around the real product boundary. The renderer and rendered-mod linter are now treated as the stable public surface, and the repo explicitly describes the four-stage pipeline as generation, content/source lint, renderer, and rendered-mod lint. That change turned a lot of fuzzy tribal knowledge into a concrete contract.
That showed up in several practical ways. I wrote down the v1 YAML contract in WORKING_MOD_CONTRACT.md, added hand-authored known-good and known-bad fixture releases, and taught validate_release.py to point authors toward the contract and the example fixtures when source validation fails. The docs now answer a hand-author’s question directly: what do I run on YAML, what do I run on a rendered mod, and what patterns are actually supported in v1.
I also removed wrapper ambiguity from the day-to-day workflow. The Makefile layer and validate_mod.py wrapper are gone from the live path, and the canonical renderer entrypoint is now stellaris_mod_renderer.py, which finally matches stellaris_mod_linter.py. CI, README, contributor docs, and the contract docs all speak that same language now. The broader value is clear: Phantasmagoria is no longer just “the AI mod generator project.” It has a more believable renderer/linter core that can support monthly releases and eventual extraction into a cleaner open-source tool surface.
Completed
- #137 Define and document the supported YAML contract for the v1 renderer/linter
- #138 Define the Phantasmagoria content/source-lint layer separately from rendered-mod lint
- #139 Promote the canonical renderer CLI to
stellaris_mod_renderer.py
Release progress
v1: 3/6 closed. Open: #140, #141, #142.v1.5: 0/1 closed. Open: #136.v2: 0/2 closed. Open: #135, #112.
Carry-over
- Merge
situation-progress-descriptionsback tomain; issues#137,#138, and#139are closed, but the work is still on the feature branch right now. #140Document Phantasmagoria namespace and ID allocation rules for monthly releases.#141Align source validation with the documented v1 YAML contract.#142Clarify or fixvalidate_outcomes.py --releasefor the currentevents/layout.- Decide whether
#136stays parked behind the v1 contract work or gets pulled forward once the v1 milestone is steadier.
Risks
- The v1 YAML contract is now documented more tightly than
validate_release.pyenforces;#141exists because that mismatch can still confuse hand-authors. validate_outcomes.py --release ...is currently misleading against the liveevents/layout; use--filefor spot checks until#142lands.- Situation code still exists as dark code, but it is not part of the supported v1 surface. The docs are clearer now, but it would still be easy to accidentally slide back into treating situations as “almost supported.”
Flags and watch-outs
stellaris_mod_renderer.pyis now the canonical renderer command.scripts/render.pyis the implementation module, not the public surface.validate_outcomes.pyis Phantasmagoria-specific content QA, not a generic linter.Makefileandscripts/validate_mod.pyare intentionally gone from the live workflow; if they reappear in docs or CI, treat that as regression drift.
Next session
- Merge or PR
situation-progress-descriptionsso the contract/CLI cleanup actually lands onmain. - Prep and exec
#140to finish the mod-identity side of the v1 architecture story. - Prep and exec
#141so source validation matches the newly documented contract. - Prep and exec
#142or otherwise fixvalidate_outcomes.py --releaseso the content-lint layer behaves honestly with the current repo layout.
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 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.
What your systems won't tell you
The most dangerous gap in any organization isn't between what you know and what you don't. It's between what your systems know and what they're willing to say.
Most of your infrastructure is decoration
Organizations are full of things that look like governance, strategy, and quality control but are actually decorative. The trigger conditions nobody reads, the dashboards nobody checks, the review processes that rubber-stamp. When you finally audit what's functional versus ornamental, the ratio is alarming.