The content pipeline
Specify the brief-to-publish pipeline from role to evals, and price the one human edit that makes 8 client posts a week safe to publish.
On this page
The agency publishes 8 blog posts a week for five clients. A writer spends about 2 hours on each and an editor about 20 minutes. The content pipeline replaces the writer and keeps the editor, with exactly one human edit between the model and a client's website. Deterministic first sorted its steps into code and model; this page builds the whole role around them, and the number it turns on is the editor's 20 minutes, not the tokens, which come to about a dollar a month.
The same pipeline as a mechanism, typed steps with a resume file and a stop point, is workflow scripts and deterministic harnesses; this page is the owner's view.
The role
Every worked automation in this module starts from the six fields of the virtual employee frame.
| Field | The content pipeline |
|---|---|
| Inputs | About 8 briefs a week from the content calendar form: client, topic, audience, keyword, length of 600 to 1,500 words, due date 3 or more working days out. Per brief, the client's style guide, product page and last three posts. |
| Outputs | A post with a headline of at most 65 characters and a meta description of at most 155, scheduled in the client's CMS. Never published unsigned; never a figure, product name or quote absent from the sources; never a competitor's name. |
| Done | By 12:00 one working day before the due date, the post is scheduled with the editor's sign-off on the exact version scheduled, or the brief is back with the account manager naming the missing field. |
| Manager | The editor: signs every post, owns the prompt, the style rules and the banned-phrase list, runs the weekly review. |
| Escalation | Brief incomplete: the account manager, within 1 working day. Draft fails its checks twice: the editor's queue, same day. A source or the CMS down: the editor, at once; nothing publishes. Unsigned at 12:00 the day before: the account manager moves the slot. |
| Budget | About $0.033 a post in tokens, at most six model calls. About 15 person-hours a month, three-quarters of it the edit. |
The scoring frame scored this task 20, its input a one-paragraph brief, and said to build a brief form first. The form now exists and lifts the score to 80, which is why the task is in the catalogue.
The SOP
The six parts from SOP to workflow:
Trigger A brief row marked "ready" in the content calendar.
Inputs Brief: client, topic, audience, keyword, length, due date.
Sources: style guide, product page, last three posts, by fixed query.
Steps 1. Read the brief. code
2. Validate it. code D1
3. Gather the sources; stop if under 500 words came back. code
4. Draft. model
5. Check the draft; one retry with the failure attached. code D2
6. Headline and meta description. model
7. Check and format as CMS blocks. code
The editor edits the review copy and signs version v. person D3
8. Publish version v to the client's slot, keyed. code D4
Decisions D1 complete = all six fields; length 600-1,500; due 3+ working days out
D2 passes = length within 10%; keyword in the first 100 words; every
link resolves; every figure and product name appears in
the sources; no banned phrase
D3 send back = the editor's note reruns step 4 once; a second send-back
means the editor writes the fix by hand
D4 publish = the hash of what sits in the slot is one the pipeline wrote
Exceptions Brief incomplete. Draft fails twice. Sent back twice. A source or the
CMS unreachable. Not signed by 12:00 the day before it is due.
Done By 12:00 one working day before the due date, every ready brief is in
exactly one end state: scheduled with sign-off on v, returned to the
account manager, or moved by the account manager.
Two lines are new since module 3. The 500-word floor exists because a check can pass on empty input: with no sources, a draft with no figures passes "every figure appears in the sources". D4 exists because of the first month.
The mistake: the edit happened somewhere else
The first version scheduled each draft straight into the client's CMS as an unpublished post, and the editor edited it there. In week three an account manager corrected the due date on a brief whose post the editor had already finished. The trigger fired again, the pipeline ran from step 1, and step 8, which found the post by brief id and updated it in place, wrote a fresh draft over the edited one.
The post that went live at 07:00 said "cuts onboarding time by 40%", which the editor had corrected to the product page's 30%. The client found it at 09:30. Module 1 put a factual error under a client's name at about $2,000, and the editor's 20 minutes had bought nothing.
Two systems held the post and neither knew which version was signed. The fix makes one of them the only place an edit happens. The editor works on the pipeline's review copy; signing records version v and a hash of its text; step 8 publishes v and only v, under the key brief id plus v. Before writing, step 8 reads the slot, and if the text there has a hash the pipeline never wrote, someone edited in the CMS: it alerts the editor and overwrites nothing. A brief changed after sign-off is an exception, not a rerun.
The rung, and why not the one below or above
This is a rung 2 build. The steps never change order, the edit is a wait of up to two working days on a named person, and two steps are rules written as code.
On n8n the edit is a Wait node resumed by the editor's sign-off form, saved rather than held in memory while it waits (Wait (opens in a new tab)). Its Limit Wait Time option resumes the run at the limit, so the next node must test whether a sign-off arrived; wired straight to step 8, the limit would turn the gate into a delay. The prompt, style rules and check code live in the workflow's JSON export, committed after every change (Export and import (opens in a new tab)).
Why not rung 1. Step 5 is ten lines of code with a loop back to step 4, and the edit is a two-day wait on a person. On rung 1 both are workarounds, and neither the prompt nor the check would be a reviewable diff.
Why not rung 3. Rung 3 adds a test that runs before a change ships and state other code can read. A person reads every post before a client does, so a broken check costs the editor minutes, not a client's trust; nothing else reads the pipeline's state; and the editor, who changes it most, edits a canvas. A developer on retainer, assumed at 2 hours a month at $80, is $160 a month, nearly four times the editor's $43 weekly review.
Why not rung 4. One agent doing six of the eight steps sends 2.1 hidden defects a week to the editor instead of 0.16, module 3 found, each a rewrite. The agent rung is for steps nobody can list in advance.
The graph
The accent path carries one version to the client; the dashed path out of the CMS is the guard the first month lacked.
The gates
Approval gates gates an item when its error rate times the cost if wrong exceeds the review's cost:
expected loss 2% of posts carry a hidden defect × $2,000 = $40 a post
review 20 minutes × $30 ÷ 60 = $10 a post
break-even $10 ÷ $2,000 = 0.5% hidden defects
Gate every post. The pipeline would have to quarter its hidden-defect rate before sampling beat reading, and the edit also fixes voice, which no check measures. "One human edit" is the arithmetic, not a habit.
Its value depends on what it catches. About 8 × 4.33 × 2% = 0.69 hidden defects a month reach the editor. Assume a real 20-minute read catches 9 in 10 and a 5-minute skim 1 in 2:
20-minute read 0.69 × 10% = 0.07 published a month × $2,000 = $139 a month
5-minute skim 0.69 × 50% = 0.35 published a month × $2,000 = $690 a month
The skim saves 15 minutes on each of 34.6 posts, $260 a month, and adds about $550 of expected errors. So the review copy logs each edit's minutes, and a month with a median under 10 is a review item.
The gate is a state machine: pending, signed, sent back, expired. Sent back returns to pending at most once. Expired, at 12:00 the day before the due date, goes to the account manager and never to publish.
The connectors
Four systems, each with the least access the role needs, as least-privilege credentials sets out.
The content calendar triggers the run. Polling every 15 minutes through a 10-hour day is 200 requests a week for 8 events, and a brief waits at most 15 minutes for a deadline three days off; webhooks versus polling has the trade.
The sources are read-only: the style-guide folder, the product page, the last three posts. Each fetch gets a timeout and two retries with backoff; one that still fails holds the run and alerts the editor.
The CMS, two kinds across five clients, is written by one identity, content-bot, which can create, update and schedule drafts but never delete, publish immediately or change settings. Every write carries the key brief id plus v, so a rerun after a crash finds the post it already wrote, the idempotency of module 5.
The model provider receives the brief, public pages and the style guide; nothing personal leaves.
The budget
The two sums from how to use this course, at the assumed $30 an hour for staff and $100 for the founder, with 8 × 4.33 = 34.6 posts a month.
Sum 1. Writing and editing are 140 minutes a post: 8 × 140 = 1,120 minutes, 18.7 hours a week, × 4.33 = 80.8 hours × $30 = $2,425 a month.
Sum 2, once. 20 founder hours for the form, the steps, two CMS connections, the review copy and the checks: $2,000.
Sum 2, run, at the assumed $2 per million input tokens and $8 per million output:
draft 5,300 in, 1,600 out $0.023
headline 1,700 in, 200 out $0.005
retries 4% of each model step rerun $0.001
send-backs 1 post in 8 reruns both model steps $0.004
per post $0.033
a month 34.6 × $0.033 $1.14
With the assumed $20 a month for the platform, run is $21. The caps bound the worst case: a draft call at most 8,000 tokens in and 2,400 out, $0.035; a headline call $0.008; six calls a post, $0.13; a month, $4.50. A month over $5 means a cap is not being enforced.
Sum 2, people.
edit 34.6 posts × 20 min 692 min
rewrites 0.69 hidden defects × 40 min 28 min
send-backs 4.3 posts × 15 min 65 min
briefs back 4.3 briefs × 10 min 43 min
weekly review 4.33 × 20 min 87 min
total 915 min = 15.2 h × $30 = $457
Sum 2 is $21 + $457 = $478 a month. The saving is $2,425 − $478 = $1,947, and the build pays back in about a month. The model calls are $1.14 of it; the edit is $346.
The model's price cannot move this decision. The edit could grow to about 130 minutes, ($2,425 − $21 − $111) ÷ $30 = 76 hours over 34.6 posts, before the saving reached zero. The catch rate matters sooner: a skim adds about $550 a month of expected loss, more than a quarter of the saving.
The evals
What "working" means builds the set from the automation's own traffic. This traffic is too thin to watch live: seeing a doubling needs about 10 errors at the normal rate, and at 5% defects per model step that is 200 drafts, six months of posts. The set must see in one run what production shows in half a year.
Cases. 200 of last year's 416 posts, each frozen with its brief and sources. The old one-paragraph briefs are converted to the form, a model pre-filling and an account manager correcting at a minute each: 3.3 hours, $100, once. Ten more are targeted: a product page carrying eleven figures, a 1,500-word brief, a client with a 40-phrase banned list, and two incomplete briefs that step 2 must return.
Graders. Steps 5 and 7 are code, so every case grades itself, pass or fail with the rule named, as evals as the unit test of LLM work describes. The editor scores voice on 10 drafts per run, 1 to 5.
step-5 failures before the retry at most 14 of 200 (7%)
still failing after the retry at most 4 of 200
targeted cases all 10 pass
voice an average of 4 or more on the editor's 10
a run 200 × $0.0284 ≈ $5.70 of tokens + 30 editor minutes, $15
At 5% the set expects 10 failures, with a standard error of √(0.05 × 0.95 ÷ 200) ≈ 1.5 points, so a doubling to 20 sits about three standard errors out. It runs on every change to the prompt, model, style rules or a check, and weekly to catch the model changing underneath, as in drift and silent failure.
Between runs the signal is the edit: its minutes and the share of sentences changed. A four-week median over 30 minutes is the first sign of worse drafts; under 10 is the skim. The weekly review reads the four most-changed diffs, and a correction made twice becomes a rule in step 5 or a case in the set.
In practice
Tell the editor: "Every post reaches you once, on the review copy, and what you sign is what publishes. An edit made in the CMS will not survive and will stop the publish." Ask a vendor selling a content agent where the edit happens, what exactly is signed, and what stops a rerun writing over it.
The mistake that costs money is letting the edit happen in a second copy. A rerun then publishes the unsigned draft over the signed one, and the $2,000 error the edit exists to stop goes out after the editor's 20 minutes have been paid for.
Check yourself
1. Volume rises to 20 posts a week. Does the edit stay on every post, and what happens to the editor's month?
The gate test does not move: 2% × $2,000 = $40 against $10, and volume is on neither side. At 86.6 posts a month the edit alone is 28.9 hours, $866, about a sixth of a full-time role on top of the editor's other work, so plan a second editor. Sum 1 rises to 86.6 × 140 minutes = 202 hours, $6,062, and the pipeline still pays easily.
2. Over a month the median edit falls from 20 minutes to 6, and no client has complained. Has the pipeline improved?
Not yet shown. Run the eval set. If step-5 failures fell from about 10 to about 4 of 200 and voice scores held, the drafts improved and the shorter edit is earned. If the set is unchanged, the edit is a skim: about 0.35 errors a month reach clients, $690 of expected loss, against $260 of editor time saved.
3. A client wants to approve every post in its own CMS before it goes live. Where does that approval go?
After the editor's sign-off, as a second gate on the signed v: the client approves or rejects v and edits nothing. A change the client wants is a send-back to the editor, producing v+1 with a new signature. Done moves to 12:00 two working days before the due date, giving the client a day.