{"id":7011,"date":"2026-09-21T23:08:55","date_gmt":"2026-09-21T23:08:55","guid":{"rendered":"https:\/\/jonjones.ai\/uncategorized\/daily-tip-tuesday-queue-days-not-rows-2026-09-22\/"},"modified":"2026-09-21T23:08:55","modified_gmt":"2026-09-21T23:08:55","slug":"daily-tip-tuesday-queue-days-not-rows-2026-09-22","status":"publish","type":"post","link":"https:\/\/jonjones.ai\/zh\/%e4%ba%ba%e5%b7%a5%e6%99%ba%e6%85%a7%e8%87%aa%e5%8b%95%e5%8c%96\/daily-tip-tuesday-queue-days-not-rows-2026-09-22\/","title":{"rendered":"\u9031\u4e8c\u5c0f\u8cbc\u58eb\uff1a\u8a08\u7b97\u4ee3\u7406\u4eba\u7684\u6392\u968a\u5929\u6578\u6642\uff0c\u8981\u4ee5\u5929\u6578\u800c\u4e0d\u662f\u884c\u6578\u4f86\u8a08\u7b97\uff08\u6211\u7684\u986f\u793a\u662f 5 \u5929\uff0c\u4f46\u5be6\u969b\u6578\u5b57\u662f 0\uff09\u3002"},"content":{"rendered":"<p>My watchdog agent ran at 23:35 last night and reported a perfect evening. Eighteen slots scheduled, seventeen dispatched, sixteen task runs exited clean. Zero failures. Nothing to retry.<\/p>\n<p>Then it told me tomorrow was already broken.<\/p>\n<p>Not failing \u2014 <em>\u7834\u788e\u7684<\/em>. Nothing had gone wrong yet, nothing would trip an alarm, and one of my agents was still going to publish something false the next night unless I intervened. Here is the tip, and then the receipt.<\/p>\n<h2>The tip: measure your queue in days, not rows<\/h2>\n<p>Every autonomous system you build ends up with the same shape. Something fills a queue. Something else drains it. And almost everybody monitors the wrong number \u2014 the row count \u2014 because it is the number the dashboard hands you for free.<\/p>\n<p>A row count tells you nothing on its own. Two numbers turn it into an answer:<\/p>\n<ul>\n<li><strong>How many rows are actually usable<\/strong> \u2014 not how many exist.<\/li>\n<li><strong>How fast the drain runs<\/strong> \u2014 usable rows divided by consumption per day gives you days of runway.<\/li>\n<\/ul>\n<p>Five rows can be zero days. Zero rows can be perfectly healthy. I have both in my container right now.<\/p>\n<h2>Receipt one: the queue that says five and means zero<\/h2>\n<p>One of my agents posts a researched social topic every night at 20:07. I pulled its queue table this morning \u2014 74 records, 69 already used, <strong>5 still queued<\/strong>. Five days of cover. Fine.<\/p>\n<p>Except all five are &#8220;On This Day&#8221; briefs, and each one is welded to a calendar date: 1958, 1967, 1982, 1991, 2008. The anniversaries are 12 September, 3 September, 19 September, 6 August and 10 September. The poster publishes to <em>tomorrow<\/em>. Every one of those dates has already gone past.<\/p>\n<p>There is no day left on which any of those five records is true. Usable rows: <strong>\u96f6<\/strong>. They were not saved for last \u2014 they were skipped, silently, night after night, because they could never be picked. The queue depth of five was made entirely of things that had quietly expired in place.<\/p>\n<h2>Receipt two: the arithmetic underneath it<\/h2>\n<p>That is the symptom. This is the disease, and it is embarrassingly simple.<\/p>\n<p>The agent that <em>fills<\/em> that queue runs twice a week \u2014 Thursday and Saturday \u2014 and writes two topics each time. That is <strong>4 records a week<\/strong> going in. The agent that drains it runs <strong>every day<\/strong>. That is <strong>7 a week<\/strong> coming out.<\/p>\n<p>Four in, seven out. A structural deficit of three records a week, hard-coded into my own schedule file. That queue was never going to survive; it was only ever a question of which Tuesday it ran dry. Nothing failed. Nobody made a mistake on the night. The outage was scheduled months ago, by me, in a config file, in two lines that nobody ever read next to each other.<\/p>\n<p>And because both agents report <code>\u6210\u529f<\/code> \u2014 the filler filled, the drainer drained \u2014 not one monitoring rule I own would ever have caught it. You cannot alert your way out of arithmetic.<\/p>\n<h2>Receipt three: the same leak, slower<\/h2>\n<p>Once you see the pattern you start checking everything. My blog pipeline: the research agent queues <strong>5 briefs every Monday<\/strong>. The writer publishes <strong>7 a week<\/strong>. Minus two a week.<\/p>\n<p>The queue currently holds <strong>9 briefs<\/strong>. That is not four and a half weeks of content \u2014 it is four and a half weeks until the exact same morning happens again, on a bigger, more expensive pipeline. It is draining at walking pace, it looks healthy every single day, and it has a due date.<\/p>\n<h2>And the one that&#8217;s fine at zero<\/h2>\n<p>Here is the counter-example that proves the row count is the wrong instrument. My newsletter queue has <strong>14 records and every one is already sent<\/strong>. Depth: zero. Empty.<\/p>\n<p>It is the healthiest pipeline I own. The researcher writes the brief Thursday morning; the writer sends it Friday morning. One in, one out, refill landing about 22 hours before it is needed. Zero rows is not a problem when the refill reliably beats the drain. Five rows is fatal when none of them can be used.<\/p>\n<h2>Three lines to steal<\/h2>\n<ol>\n<li><strong>Give every record a usability test, and count only what passes.<\/strong> One question: <em>is this row still true on the day it gets consumed?<\/em> Anything with a date, a price, a stock level or a deadline baked into it has a shelf life. Expired rows should not be quietly skipped \u2014 they should be marked dead, so your depth number stops lying to you.<\/li>\n<li><strong>Report queues in days of runway, not rows.<\/strong> Usable rows \u00f7 consumption per day. Have the agent print that one line every run, and alert under two days. &#8220;Five records&#8221; is trivia; &#8220;zero days&#8221; is an instruction.<\/li>\n<li><strong>Diff the two rates before you ship anything.<\/strong> Producer per week versus consumer per week. If the producer is slower, you have not built a pipeline, you have built a countdown \u2014 and no amount of monitoring, retrying or error handling will save it, because nothing is going to break. Fix it in the scheduler, or make the consumer skip loudly instead of inventing something to publish.<\/li>\n<\/ol>\n<p><strong>\u8981\u9ede\uff1a<\/strong> a queue is not a bucket, it is a clock. The row count tells you how much is in there. Only the rate tells you how long you have \u2014 and the failures that hurt most in an autonomous system are the ones where nothing fails, everything reports success, and the calendar quietly runs out underneath you.<\/p>\n<p>This is the intake version of the problem I wrote about yesterday, when my agent had produced <a href=\"https:\/\/jonjones.ai\/zh\/%e4%ba%ba%e5%b7%a5%e6%99%ba%e6%85%a7%e8%87%aa%e5%8b%95%e5%8c%96\/daily-monday-myth-ai-agent-cheaper-va-2026-09-21\/\">314 drafts and posted zero of them<\/a> \u2014 same disease, opposite end of the pipe. It is also why <a href=\"https:\/\/jonjones.ai\/zh\/%e4%ba%ba%e5%b7%a5%e6%99%ba%e6%85%a7%e8%87%aa%e5%8b%95%e5%8c%96\/%e6%af%8f%e6%97%a5%e5%b0%8f%e8%b2%bc%e5%a3%ab%e6%98%9f%e6%9c%9f%e4%ba%8c%e8%a1%8c%e7%a8%8b%e8%ac%8a%e8%a8%80-2026-08-11\/\">your scheduler lies to you<\/a> and why a clean exit code is not evidence of work: I covered the <a href=\"https:\/\/jonjones.ai\/zh\/%e4%ba%ba%e5%b7%a5%e6%99%ba%e6%85%a7%e8%87%aa%e5%8b%95%e5%8c%96\/%e6%af%8f%e6%97%a5%e6%98%9f%e6%9c%9f%e5%85%ad%e6%8d%b7%e5%be%91%e4%ba%ba%e5%b7%a5%e6%99%ba%e6%85%a7%e4%bb%a3%e7%90%86%e9%9d%9c%e9%bb%98%e5%a4%b1%e6%95%97-2026-09-19\/\">silent-failure checks<\/a> that catch the rest. If your own piles have grown past reading, start by <a href=\"https:\/\/jonjones.ai\/zh\/%e4%ba%ba%e5%b7%a5%e6%99%ba%e6%85%a7%e8%87%aa%e5%8b%95%e5%8c%96\/%e6%af%8f%e6%97%a5%e9%80%b1%e6%97%a5%e8%a8%ad%e5%ae%9a%e5%af%a9%e6%a0%b8%e9%9a%8a%e5%88%97-2026-09-06\/\">clearing the approval queue before it clears you<\/a>.<\/p>\n<p>Want the plumbing that makes this boring instead of exciting? That is most of the real work behind <a href=\"https:\/\/jonjones.ai\/zh\/%e5%95%86%e6%a5%ad\/%e5%ae%8c%e5%85%a8%e8%87%aa%e4%b8%bb%e7%9a%84%e4%ba%ba%e5%b7%a5%e6%99%ba%e6%85%a7%e4%bb%a3%e7%90%86\/\">agents you can actually leave alone<\/a>. <a href=\"https:\/\/jonjones.ai\/zh\/%e9%a0%90%e7%b4%84%e6%9c%83%e8%ad%b0\/\">\u9810\u7d04\u81ea\u52d5\u5316\u7b56\u7565\u6703\u8b70<\/a> and we will count your queues in days.<\/p>","protected":false},"excerpt":{"rendered":"<p>\u4f47\u5217\u4e2d\u5df2\u6709\u4e94\u7b46\u8a18\u9304\uff0c\u4f46\u7121\u4e00\u7b46\u53ef\u7528\uff0d\u586b\u5145\u4ee3\u7406\u7a0b\u5f0f\u6bcf\u9031\u57f7\u884c 4 \u6b21\uff0c\u800c\u6e05\u7a7a\u4ee3\u7406\u7a0b\u5f0f\u6bcf\u9031\u57f7\u884c 7 \u6b21\u3002\u8861\u91cf AI \u4ee3\u7406\u968a\u5217\u7684\u904b\u884c\u5929\u6578\uff0c\u800c\u4e0d\u662f\u884c\u6578\uff0c\u624d\u662f\u95dc\u9375\u3002.<\/p>","protected":false},"author":2,"featured_media":7010,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[44],"tags":[],"class_list":["post-7011","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-automation"],"taxonomy_info":{"category":[{"value":44,"label":"AI Automation"}]},"featured_image_src_large":["https:\/\/jonjones.ai\/wp-content\/uploads\/2026\/09\/daily-tip-tuesday-queue-runway-20260922.jpg",1344,752,false],"author_info":{"display_name":"Jon Jones","author_link":"https:\/\/jonjones.ai\/zh\/author\/jonjonjones-ai\/"},"comment_info":0,"category_info":[{"term_id":44,"name":"AI Automation","slug":"ai-automation","term_group":0,"term_taxonomy_id":44,"taxonomy":"category","description":"","parent":0,"count":188,"filter":"raw","cat_ID":44,"category_count":188,"category_description":"","cat_name":"AI Automation","category_nicename":"ai-automation","category_parent":0}],"tag_info":false,"_links":{"self":[{"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/posts\/7011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/comments?post=7011"}],"version-history":[{"count":0,"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/posts\/7011\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/media\/7010"}],"wp:attachment":[{"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/media?parent=7011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/categories?post=7011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/tags?post=7011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}