Why I Split an AI Newsroom into Desks

Archive note: This records the December 2025 design of SoCalNomad’s
automated newsroom. The implementation changed later, but the
architectural boundaries remain relevant.

The easiest AI workflow to draw is a single large box.

Give the model access to the database, the publishing API, a prompt
describing the publication, and enough tools to do everything. Ask it to
find stories, judge them, write them, publish them, and promote
them.

That design looks efficient because the diagram is small. It is also
difficult to debug, audit, or trust. When the result is wrong, there is
no clean answer to whether the failure came from research, editorial
judgment, writing, operations, or publication.

SoCalNomad’s automated newsroom moved in the opposite direction. It
borrowed the language of a traditional newsroom and divided work among
specialized desks.

The Manager Was Not the
Writer

The central agent was named J.J. Jameson because subtle naming was
apparently unavailable that week. The important design rule was less
theatrical:

J.J. was a manager, not a worker.

The agent could review story clusters, score them against explicit
criteria, approve or hold them, check desk capacity, dispatch
assignments, and report status. It was not supposed to fetch feeds,
synthesize articles, generate images, or call WordPress directly.

That limitation reduced the number of ways one confused conversation
could damage the system. Editorial judgment and operational authority
were still concentrated in one agent, but execution occurred
elsewhere.

Each Desk Had One Kind
of Responsibility

The design separated the pipeline into several roles:

  • The Research Desk discovered, normalized, and clustered source
    material.
  • The managing editor evaluated whether a cluster was worth
    pursuing.
  • The Publishing Desk synthesized and validated an article.
  • The Marketing Desk reacted to publication events and prepared
    derivative material.
  • A job processor moved durable assignments from a queue to the
    appropriate desk.

The boundaries were more important than the names.

Research was descriptive rather than editorial. It could say which
articles appeared to describe the same event, but it could not decide
that the event deserved publication.

Publishing could transform an approved cluster into an article, but
it could not approve its own source material.

Marketing subscribed to a post_published event rather
than receiving step-by-step commands from the editor. That kept
downstream promotion from becoming another branch of the editor’s
prompt.

Three Different Kinds of
State

One of the strongest design decisions was separating editorial,
operational, and governance state.

Editorial state answered: Is this story approved, held, rejected, or
published?

Operational state answered: Is an assignment pending, running,
stalled, failed, or complete?

Governance state answered: Was the action logged, deduplicated,
locked, and authorized?

Those questions sound related, but collapsing them creates
contradictions. A story can be editorially approved while the Publishing
Desk is offline. An assignment can be operationally available while the
story is still awaiting review. A published article can exist even if a
later status update failed.

Separate state machines made those combinations visible instead of
hiding them in one overloaded status field.

The Agent Needed
Rules It Could Not Negotiate

The managing editor scored relevance, freshness, source quality,
duplication risk, and audience fit. The scores supported a decision, but
they did not control everything.

Several rules lived outside the model:

  • A story needed multiple independent sources.
  • Dispatch checked whether the destination desk was enabled and
    healthy.
  • Unique constraints prevented duplicate active assignments.
  • Publishing checked for an existing post before creating
    another.
  • Human overrides were logged without erasing the original
    decision.
  • Events carried unique identifiers so consumers could ignore
    duplicates.

These were intentionally boring controls. Prompt instructions are
useful guidance, but they are not equivalent to constraints, locks, and
idempotent database operations.

Human Override Was
Part of the Architecture

The system treated a human override as an expected operation, not an
embarrassing exception.

If I changed a rejection to an approval, the original automated
decision remained in the audit history. The override added a new fact
rather than rewriting the past. That made later comparison possible:
where did the automated editor disagree with the human editor, and who
was usually right?

This was also a useful correction to the fantasy of full autonomy.
The system did not need to eliminate editorial involvement. It needed to
make routine work cheaper while preserving a clear point of control.

Smaller Boxes Produce
Better Failures

The desk architecture created more workflows, tables, and transitions
than the monolith. It was not simpler in raw component count.

It was simpler when something failed.

If research produced bad clusters, the error could be examined before
writing began. If publication failed, the approved cluster and
assignment still existed. If marketing was unavailable, the article did
not need to be republished. If the editor made a bad decision, the score
and reasoning could be inspected.

That is the practical argument for specialized AI systems. The goal
is not to imitate an office org chart. It is to create boundaries where
state can be validated, retried, and audited.

The large intelligent box is appealing until it behaves
unintelligently. Then every boundary omitted from the design has to be
rediscovered during the incident.