{"id":102,"date":"2026-08-09T08:47:17","date_gmt":"2026-08-09T08:47:17","guid":{"rendered":"https:\/\/www.dobryakov.net\/blog\/102\/"},"modified":"2026-08-09T08:47:17","modified_gmt":"2026-08-09T08:47:17","slug":"content-pipeline-aug-2026","status":"publish","type":"post","link":"https:\/\/www.dobryakov.net\/blog\/102\/","title":{"rendered":"How the pipeline that generates the content you&#8217;re reading actually works"},"content":{"rendered":"<p>This is not a detached story about content automation. This article is moving through the same loop it describes: brief, evidence, canon, channel versions, checks, publication.<\/p>\n<p>Under the hood, the scheme is deliberately simple: <strong>chat writes, git stores the state, the server publishes.<\/strong> On a whiteboard, it looks obvious. In real work, this bus appeared only because I could no longer answer a basic operational question: what state is this text in, which versions are ready, and where does it go next?<\/p>\n<p>This is an engineering diary: how separate channel writers turned into one unit with a manifest; why automatic publishing to personal social channels failed in a live run; and why orchestration had to be separated from writing. Without that last cut, this article would be lying about itself.<\/p>\n<p><!--more--><\/p>\n<h2>Many skills, no single source of truth<\/h2>\n<p>From April to late July 2026, the channels lived separately. Different writers and processors handled different parts of the flow: evidence gathering, humanizer, expert voice, Facebook and LinkedIn posts, claim checks, per-platform archives, and later WordPress, images, Telegram.<\/p>\n<p>There was no canonical source. No single place could answer: where has this material already gone? Distribution lived in memory: remember EN after RU, don\u2019t miss the slot, don\u2019t lose Twitter after WordPress.<\/p>\n<p>The problem was not \u201cnot enough automation.\u201d The cost was elsewhere: every release became a checklist inside someone\u2019s head. The status \u201cpublished\u201d could exist in chat, in a calendar, and in memory at the same time \u2014 and those versions could disagree.<\/p>\n<p>The media pipeline sat on top of that: voiceover, clips, montage. It tried to live next to text production and kept bloating one skill into \u201cthis does everything somehow,\u201d while reproducing the result became harder each time. I wrote about a related cut in the <a href=\"https:\/\/www.dobryakov.net\/blog\/80\/\">hybrid reels pipeline<\/a>: live expert video plus AI B-roll inserts.<\/p>\n<p>By late July, the diagnosis was simple: <strong>the problem is not too few skills. The problem is that there is no bus.<\/strong><\/p>\n<h2>Morning: a document. Evening: a unit<\/h2>\n<p>At the end of July, everything moved in one day.<\/p>\n<p>In the morning there was a Content Unit + Channel Manifest document: channel dependencies, Twitter after WordPress, a YouTube sketch, statuses. By evening, it had turned into a status machine: git as the bus, calendar, covers, EN in the same run.<\/p>\n<p>The key simplification appeared immediately: <strong>generation stays in chat; the server only publishes.<\/strong> There is no need for a separate LLM runtime on the server. Chat creates files and pushes them. The server periodically reads the manifest and publishes what is ready.<\/p>\n<p>The first code arrived the same day: a <code>\/distribute<\/code> command, a channel registry, cover and calendar logic on the server, a publish orchestrator, and a bot for statuses and confirmations of manual posts.<\/p>\n<p>Months of separate writers finally got one source of truth: one slug, one canon, channel statuses in the manifest.<\/p>\n<p>The repository now contains dozens of such folders; most of them have a manifest. What you read as an article is, for the server, already a finished artifact with a status.<\/p>\n<h2>The bus arrived \u2014 and bit back<\/h2>\n<p>The next step was obvious: real channels started riding the bus.<\/p>\n<p>Facebook and LinkedIn first went through APIs automatically. Almost immediately, they came back to <strong>manual<\/strong>: calendar, Telegram DM, human confirmation. The auto modules stayed for one-off CLI runs, but the manual loop became the default.<\/p>\n<p>That was not fear of automation. It was a personal-brand failure mode. A post that ships \u201cby itself\u201d in the background breaks the feeling of authorship. For a feed where the author\u2019s act matters more than speed, auto-publishing turned out to be an expensive convenience.<\/p>\n<p>In parallel came Shorts. First as a thin voiceover-and-upload loop. Then Shorts became a full channel in the registry.<\/p>\n<p>At the same time, there was a structural break: dozens of standalone posts moved into shared unit folders; the archival chronographer was removed and replaced by <code>\/distribute<\/code>. The structure hardened:<\/p>\n<p><strong>one slug \u2192 one canon \u2192 many channel projections.<\/strong><\/p>\n<p>This article lives in exactly that kind of folder.<\/p>\n<p>After assembly came operations: the details that look small in architecture docs and break queues in real life. Timezones. Slot collisions. Channel scoring. Smarter scheduling. Twitter manual again, waiting on the EN blog. A single length check. Confirmation of manual posts. A view of what is in the queue right now. A brief in every unit.<\/p>\n<p>On paper, the chain already looked fine. In practice, one painful cut remained: stop mixing orchestration and writing.<\/p>\n<p>But first, Shorts nearly ate the server.<\/p>\n<h2>Three generations of Shorts in three days<\/h2>\n<p>The loudest stretch was Shorts. These were not small tweaks. They were three generations in a row.<\/p>\n<p>First: text adaptation and a single clip.<\/p>\n<p>Then: multi-scene production, with a separate render status, a scenario, and a large block of server code.<\/p>\n<p>Then: hard cutover \u2014 speech \u2192 storyboard \u2192 timeline \u2192 clips \u2192 montage. Only speech stayed in chat. The server took preflight, TTS, generation, and assembly. The old script skill was removed. Its metrics are now mostly noise: they describe a short life of renames, not the current boundary.<\/p>\n<p>That is where the main practical lesson of the media pipe became obvious: heavy voiceover and video generation inside chat bloat skills and destroy reproducibility. Once production moved to the server, the boundary became checkable.<\/p>\n<p>Chat owns speech. Server owns everything else.<\/p>\n<p>Writing was noisy at the same time. Among pipeline skills, the humanizer had the highest churn. Distribute also changed a lot, but for another reason: it was building orchestration, not rewriting prose. Facebook and LinkedIn writers almost always moved together because both were being adapted from the same canon.<\/p>\n<p>Small problems kept resurfacing \u2014 the kind that make cron lie: when to check length, how to inject the blog URL into manual DMs, how to cover speech with clips. Shorts caused a visible share of server churn. But the center of gravity still sat in the publish orchestrator.<\/p>\n<h2>The orchestrator no longer writes what you are reading<\/h2>\n<p>Compressed to its main seams, the story has five cuts:<\/p>\n<ol>\n<li><strong>A bus instead of scattered handlers.<\/strong> From \u201cwe need an LLM on the server\u201d to \u201cchat generates, the server publishes.\u201d<\/li>\n<li><strong>Rollback of automatic FB\/LI publishing.<\/strong> Personal social stayed manual: calendar, DM, confirmation.<\/li>\n<li><strong>One output structure.<\/strong> Chronographer removed; everything lives in a unit folder.<\/li>\n<li><strong>Shorts moved to the server.<\/strong> Chat handles speech only; the server handles video production.<\/li>\n<li><strong>The orchestrator stopped writing.<\/strong> <code>\/distribute<\/code> no longer generates texts. It moves material.<\/li>\n<\/ol>\n<p>The fifth point matters most for this meta-story. Otherwise the article would pretend that the orchestrator \u201cwrote the article.\u201d<\/p>\n<p>It didn\u2019t.<\/p>\n<p>The boundary is now this: storytelling writes the canon; channel adapters produce versions from a finished source; short channels take rhythm from the brief and facts from the source; humanizer moved from a heavy sub-agent to a thin CLI.<\/p>\n<p>The text chain ends like this:<\/p>\n<p><strong>brief \u2192 evidence \u2192 storytelling \u2192 adapters \u2192 humanizer \u2192 expert voice \u2192 length check \u2192 validation<\/strong><\/p>\n<p>Shorts sit apart:<\/p>\n<p><strong>chat = speech, server = all video production<\/strong><\/p>\n<p>The repeating pattern is visible in git, not in theory. First everything lands in one large skill. After the first live run, it becomes clear where it hurts. Then one piece moves to the server, to a narrow agent, or to a separate script.<\/p>\n<p>There was no perfect scheme in the first commit. There were live runs and a gradual sense of where to cut.<\/p>\n<h2>The seam still waiting to be cut<\/h2>\n<p>The main candidate for stabilization now is the humanizer. After the move to CLI, its contract must not inflate again.<\/p>\n<p>Shorts should be judged by the current speech\/render boundary, not by the history of a deleted script skill.<\/p>\n<p>The fact that Facebook and LinkedIn writers almost always changed together is also a signal: platform mechanics can still be compressed around a shared voice canon. The publish orchestrator remains the center of gravity. The logical next step is a split by channel \u2014 the way calendar already moved into its own module.<\/p>\n<p>If you are building a similar loop, don\u2019t start with \u201ca smart writer on the server.\u201d Start with three things: a manifest, statuses, and the boundary <strong>chat writes \u2192 server publishes<\/strong>.<\/p>\n<p>Writers, adapters, and the media pipe can be cut later \u2014 when a live run shows where a skill only pretends to orchestrate, while it is already writing, editing, publishing, and deciding at the same time. I cut the same \u201cwho does what\u201d line in <a href=\"https:\/\/www.dobryakov.net\/blog\/82\/\">AI across the full software lifecycle<\/a> \u2014 there for SDLC, here for the content bus.<\/p>\n<p>The whole arc took a few months. First, scattered channel writers. Then the bus. Then channels. Then a painful rollback of auto-publishing. Then three generations of Shorts. And finally the cut without which this article would be dishonest: the orchestrator no longer writes the texts you read.<\/p>\n<p>This material is the same kind of unit in that pipeline: canon separate, publish separate, manual control where a personal brand does not forgive background noise.<\/p>\n<p>If your pipeline still generates, publishes, and \u201cjust a little\u201d edits text in one place, the seam is already visible. The only thing left is to cut it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Chat writes, git holds state, the server publishes: how a bus of content units grew out of scattered channel skills \u2014 and why the orchestrator no longer writes the words you read. This piece is going through that loop itself.<\/p>\n","protected":false},"author":0,"featured_media":101,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24,68],"tags":[97,98,100,101,99],"class_list":["post-102","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-engineering","category-engineering-leadership","tag-content-pipeline","tag-distribute","tag-engineering-diary","tag-meta","tag-publishing"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"Content-unit architecture: chat writes \u2192 git as the bus \u2192 server publishes. Five seams from scattered skills to a hard line between orchestration and writing \u2014 told by an article that is itself in that pipeline.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.dobryakov.net\/blog\/102\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Grigoriy Dobryakov - IT+AI Blog - Grigoriy Dobryakov&#039;s blog: management, development and testing\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"How the pipeline that generates the content you&#039;re reading actually works\" \/>\n\t\t<meta property=\"og:description\" content=\"Content-unit architecture: chat writes \u2192 git as the bus \u2192 server publishes. Five seams from scattered skills to a hard line between orchestration and writing \u2014 told by an article that is itself in that pipeline.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.dobryakov.net\/blog\/102\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-08-09T08:47:17+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-08-09T08:47:17+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"How the pipeline that generates the content you&#039;re reading actually works\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Content-unit architecture: chat writes \u2192 git as the bus \u2192 server publishes. Five seams from scattered skills to a hard line between orchestration and writing \u2014 told by an article that is itself in that pipeline.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/102\\\/#blogposting\",\"name\":\"How the pipeline that generates the content you're reading actually works\",\"headline\":\"How the pipeline that generates the content you&#8217;re reading actually works\",\"author\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/author\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/content-pipeline-aug-2026.jpg\",\"width\":1200,\"height\":630,\"caption\":\"How the pipeline that generates the content you're reading actually works\"},\"datePublished\":\"2026-08-09T08:47:17+00:00\",\"dateModified\":\"2026-08-09T08:47:17+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/102\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/102\\\/#webpage\"},\"articleSection\":\"AI Engineering, Engineering Leadership, content-pipeline, distribute, engineering-diary, meta, publishing\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/102\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/ai-engineering\\\/#listItem\",\"name\":\"AI Engineering\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/ai-engineering\\\/#listItem\",\"position\":2,\"name\":\"AI Engineering\",\"item\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/ai-engineering\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/102\\\/#listItem\",\"name\":\"How the pipeline that generates the content you&#8217;re reading actually works\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/102\\\/#listItem\",\"position\":3,\"name\":\"How the pipeline that generates the content you&#8217;re reading actually works\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/ai-engineering\\\/#listItem\",\"name\":\"AI Engineering\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#organization\",\"name\":\"Grigoriy Dobryakov - IT+AI Blog\",\"description\":\"Grigoriy Dobryakov's blog: management, development and testing\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/102\\\/#webpage\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/102\\\/\",\"name\":\"How the pipeline that generates the content you're reading actually works\",\"description\":\"Content-unit architecture: chat writes \\u2192 git as the bus \\u2192 server publishes. Five seams from scattered skills to a hard line between orchestration and writing \\u2014 told by an article that is itself in that pipeline.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/102\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/author\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/author\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/content-pipeline-aug-2026.jpg\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/102\\\/#mainImage\",\"width\":1200,\"height\":630,\"caption\":\"How the pipeline that generates the content you're reading actually works\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/102\\\/#mainImage\"},\"datePublished\":\"2026-08-09T08:47:17+00:00\",\"dateModified\":\"2026-08-09T08:47:17+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/\",\"name\":\"Grigoriy Dobryakov - IT+AI Blog\",\"description\":\"Grigoriy Dobryakov's blog: management, development and testing\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"How the pipeline that generates the content you're reading actually works","description":"Content-unit architecture: chat writes \u2192 git as the bus \u2192 server publishes. Five seams from scattered skills to a hard line between orchestration and writing \u2014 told by an article that is itself in that pipeline.","canonical_url":"https:\/\/www.dobryakov.net\/blog\/102\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.dobryakov.net\/blog\/102\/#blogposting","name":"How the pipeline that generates the content you're reading actually works","headline":"How the pipeline that generates the content you&#8217;re reading actually works","author":{"@id":"https:\/\/www.dobryakov.net\/blog\/author\/#author"},"publisher":{"@id":"https:\/\/www.dobryakov.net\/blog\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/www.dobryakov.net\/blog\/wp-content\/uploads\/2026\/08\/content-pipeline-aug-2026.jpg","width":1200,"height":630,"caption":"How the pipeline that generates the content you're reading actually works"},"datePublished":"2026-08-09T08:47:17+00:00","dateModified":"2026-08-09T08:47:17+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.dobryakov.net\/blog\/102\/#webpage"},"isPartOf":{"@id":"https:\/\/www.dobryakov.net\/blog\/102\/#webpage"},"articleSection":"AI Engineering, Engineering Leadership, content-pipeline, distribute, engineering-diary, meta, publishing"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dobryakov.net\/blog\/102\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.dobryakov.net\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/category\/ai-engineering\/#listItem","name":"AI Engineering"}},{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/category\/ai-engineering\/#listItem","position":2,"name":"AI Engineering","item":"https:\/\/www.dobryakov.net\/blog\/category\/ai-engineering\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/102\/#listItem","name":"How the pipeline that generates the content you&#8217;re reading actually works"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/102\/#listItem","position":3,"name":"How the pipeline that generates the content you&#8217;re reading actually works","previousItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/category\/ai-engineering\/#listItem","name":"AI Engineering"}}]},{"@type":"Organization","@id":"https:\/\/www.dobryakov.net\/blog\/#organization","name":"Grigoriy Dobryakov - IT+AI Blog","description":"Grigoriy Dobryakov's blog: management, development and testing","url":"https:\/\/www.dobryakov.net\/blog\/"},{"@type":"WebPage","@id":"https:\/\/www.dobryakov.net\/blog\/102\/#webpage","url":"https:\/\/www.dobryakov.net\/blog\/102\/","name":"How the pipeline that generates the content you're reading actually works","description":"Content-unit architecture: chat writes \u2192 git as the bus \u2192 server publishes. Five seams from scattered skills to a hard line between orchestration and writing \u2014 told by an article that is itself in that pipeline.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.dobryakov.net\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.dobryakov.net\/blog\/102\/#breadcrumblist"},"author":{"@id":"https:\/\/www.dobryakov.net\/blog\/author\/#author"},"creator":{"@id":"https:\/\/www.dobryakov.net\/blog\/author\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/www.dobryakov.net\/blog\/wp-content\/uploads\/2026\/08\/content-pipeline-aug-2026.jpg","@id":"https:\/\/www.dobryakov.net\/blog\/102\/#mainImage","width":1200,"height":630,"caption":"How the pipeline that generates the content you're reading actually works"},"primaryImageOfPage":{"@id":"https:\/\/www.dobryakov.net\/blog\/102\/#mainImage"},"datePublished":"2026-08-09T08:47:17+00:00","dateModified":"2026-08-09T08:47:17+00:00"},{"@type":"WebSite","@id":"https:\/\/www.dobryakov.net\/blog\/#website","url":"https:\/\/www.dobryakov.net\/blog\/","name":"Grigoriy Dobryakov - IT+AI Blog","description":"Grigoriy Dobryakov's blog: management, development and testing","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.dobryakov.net\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Grigoriy Dobryakov - IT+AI Blog - Grigoriy Dobryakov's blog: management, development and testing","og:type":"article","og:title":"How the pipeline that generates the content you're reading actually works","og:description":"Content-unit architecture: chat writes \u2192 git as the bus \u2192 server publishes. Five seams from scattered skills to a hard line between orchestration and writing \u2014 told by an article that is itself in that pipeline.","og:url":"https:\/\/www.dobryakov.net\/blog\/102\/","article:published_time":"2026-08-09T08:47:17+00:00","article:modified_time":"2026-08-09T08:47:17+00:00","twitter:card":"summary_large_image","twitter:title":"How the pipeline that generates the content you're reading actually works","twitter:description":"Content-unit architecture: chat writes \u2192 git as the bus \u2192 server publishes. Five seams from scattered skills to a hard line between orchestration and writing \u2014 told by an article that is itself in that pipeline."},"aioseo_meta_data":{"post_id":"102","title":"How the pipeline that generates the content you're reading actually works","description":"Content-unit architecture: chat writes \u2192 git as the bus \u2192 server publishes. Five seams from scattered skills to a hard line between orchestration and writing \u2014 told by an article that is itself in that pipeline.","keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":"How the pipeline that generates the content you're reading actually works","og_description":"Content-unit architecture: chat writes \u2192 git as the bus \u2192 server publishes. Five seams from scattered skills to a hard line between orchestration and writing \u2014 told by an article that is itself in that pipeline.","og_object_type":"default","og_image_type":"default","og_image_custom_url":null,"og_image_custom_fields":null,"og_image_url":null,"og_image_width":null,"og_image_height":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_image_url":null,"twitter_title":"How the pipeline that generates the content you're reading actually works","twitter_description":"Content-unit architecture: chat writes \u2192 git as the bus \u2192 server publishes. Five seams from scattered skills to a hard line between orchestration and writing \u2014 told by an article that is itself in that pipeline.","schema_type":"default","schema_type_options":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null,"created":"2026-08-09 08:47:36","updated":"2026-08-09 08:47:36"},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.dobryakov.net\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.dobryakov.net\/blog\/category\/ai-engineering\/\" title=\"AI Engineering\">AI Engineering<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tHow the pipeline that generates the content you\u2019re reading actually works\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.dobryakov.net\/blog"},{"label":"AI Engineering","link":"https:\/\/www.dobryakov.net\/blog\/category\/ai-engineering\/"},{"label":"How the pipeline that generates the content you&#8217;re reading actually works","link":"https:\/\/www.dobryakov.net\/blog\/102\/"}],"_links":{"self":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/posts\/102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/comments?post=102"}],"version-history":[{"count":0,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/posts\/102\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/media\/101"}],"wp:attachment":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/media?parent=102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/categories?post=102"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/tags?post=102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}