Read it in the margins.
Workshop.
The marginalia style typesets the system as a book in
design-system-marginalia.css:
Alegreya at reading weight, a drop cap on the opening line, cards ruled above
and below instead of boxed, and notes hung off an accent rule. Same components,
same markup — with glosses.
Reading in an unnamed pair — marginalia / blueprint Change theme Browse all 8 →
01
The editor
The two-pane arrangement: a form column beside a monospace Markdown column,
with the counts under it. Made of Core's form fields and one Workshop-only
layout rule. Proves the forms layer at density — nine fields (tags
since the agent council of 7 Nov 2026), two fieldsets and a validation summary
in a 340px column is the hardest thing the
layer has to do, and this is the specimen that will catch a padding change
nobody meant.
Kumar asked for changes 19 Aug 19:02
The second section repeats the first; cut one and the argument is sharper.
It is yours again — edit below and submit when you are ready. Nothing was rejected and nothing was lost.
Timeline
-
19 Aug 14:02
a blank draft
-
19 Aug 15:02
You submitted this for review.
-
19 Aug 19:02
Kumar asked for changes.
02
The queue and the decision
The record row with a state pill on the right, and the three outcomes beneath
it as one form of three radio rows, each with its own field and button. Made of
Post cards, Badges & pills, Buttons and the form fields.
Proves the five-state scale reads when the five pills are beside each
other rather than one per screen, which is the only place their relative weight
is visible.
- Outbox without a scheduler Draft
- A guest post about queues In review
- Measuring the developer Changes requested
- The one that got scheduled Scheduled
- Five modules, one database each Published
Front matter
- title
- Outbox without a scheduler
- slug
outbox-without-a-scheduler- summary
- Claiming a batch without two instances fighting over it.
- category
- Distributed systems
- author
- Jo Tan
jo-tan
Read-only, and not because of a permission. A correction is the author’s to make — asking for it is what the first outcome below is for, and editing somebody’s words on their behalf leaves no trail that it happened.
Body — as submitted
A body long enough to have cleared the gate.
- A guest post about queues In review
- Five modules, one database each Published
03
The overview
The section head with a count, the chip filter row and the series arc. Made of
Page hero, Buttons & chips and Series map. Proves the series map survives
its new modifier — "nobody has taken this part" was added for this app
and is rendered on the blog, so the one specimen showing both is here.
Series 1/4 out Aspire in Production
- The dashboard you get for free out
- Service discovery, and when to stop scheduled
- not started open
- Outbox without a scheduler draft
Nobody has taken part 3.
Series 1/5 out Microservices with Convey
- Why a framework at all out
- not started open
- Messaging without a broker in review
- Sagas, honestly with the author
- not started open
Nobody has taken parts 2, 5.
Series 1/4 out Aspire in Production
- The dashboard you get for free out
- Service discovery, and when to stop scheduled
- not started open
- Outbox without a scheduler draft
Nobody has taken part 3.
Everything you have touched
- Outbox without a scheduler Draft
- A guest post about queues In review
- Measuring the developer Changes requested
- The one that got scheduled Scheduled
- Five modules, one database each Published
That is usually the good news.
Everything you have touched
The blank door is one click away.
Topics you have written in
- Distributed systems
- Architecture
- .NET
04
The gate and the banner
The preview strip — the top strip family's
--preview member — as the app that needed it
first renders it, for the author and for the owner. The section that
documented something built to be deleted, and kept the record: its second
half was the interim sign-in screen, which went when real sign-in landed, as
this summary said it would.
Sign-in landed and
BY4 deleted the screen, the form, its cookie and
its switch. This paragraph is what is left of it, kept rather than removed,
because a section that quietly shrinks is a section whose reason for shrinking
is lost — and because it is the one place in the showcase where a
prediction about a deletion can be read beside the deletion.
05
The work bar & the screens' furniture
The app's own chrome and what every screen is built from: the work bar's light
member for an author on their own work and its dark member for the owner on
somebody else's; the screen head with its breadcrumb kicker; the note on a
callout, neutral or a refusal; and the foot note. The ground says whose work
it is and the badge says who you are — two facts on two channels.
Your writing
Only your own work is counted here — a draft is the author’s and only the author’s until it is submitted.
Jo Tan
Workshop › review
2 waiting on you
Everything anyone has submitted.
This does not survive a restart yet. Keep anything you would be sorry to lose somewhere else too.
That draft is with the owner, so it cannot be saved until it is withdrawn.
Written somewhere else? Start blank and paste it into the body pane.
06
The ways in
Three doors into one kind of draft — blank, the next part of a series, shaped
like an existing post — as three cards of equal weight in one form. A
door with nothing behind it is shut and says why rather than disappearing.
07
Plan a series
The series planner on the author's own model
(_AiSeries, _SeriesPart, and the
chain's _ChainStep): the author's model plans the parts, then
one worker per part searches the archive. A shared word is not enough: covered
and near are overlaps the author judges, clear is clear, and where meaning cannot be
asked a part is unjudged. Behind WORKSHOP_ENABLED and AI_ENABLED.
Event-driven .NET, from outbox to saga
Why events get lost between the database and the broker
focus: outbox transaction reliabilitykeywords pass (BM25 16.8); meaning could not be asked, so nothing is flagged, named or linkedtags: dotnet, messaging, outbox, reliabilityunjudgedAn outbox table and a relay, in EF Core
focus: outbox relay ef corekeywords pass (BM25 26.7); meaning could not be asked, so nothing is flagged, named or linkedtags: ef-core, dotnet, multi-tenancy, migrationsunjudgedEvent-driven .NET, from outbox to saga
Why events get lost between the database and the broker
both searches pick first: The Outbox That Keeps Your Events Honest (BM25 16.8, meaning 0.538); keep the link or drop ittags: dotnet, messaging, outbox, reliabilitycovered · the author judgesAn outbox table and a relay, in EF Core
keywords pick Making EF Core Migrations Schema-Aware, meaning picks The Outbox That Keeps Your Events Honestnear: The Outbox That Commits Somewhere Elsetags: ef-core, dotnet, multi-tenancy, migrationsnear · the author judgesEF Core compiled models and startup time
keywords pick Making EF Core Migrations Schema-Aware (BM25 25.5), meaning picks A DB-First Model in Code-First Clothing; no post is in both first fourstags: ef-core, dotnet, multi-tenancy, migrationsThe planner refused the topic or the count, so no model was asked.
no topic, so nothing was askedYour model’s plan broke its schema twice, so no worker ran. Ask again, or try another model.
parts: 4 items, expected 5No connection in this tab is granted to the planner. Connect one at /ai/connect.
Markup
As rendered on the page behind this — captured, not transcribed.