The channel card, as ruled

Pill treatment A, solid and tightened. Your three rows per channel, in your words. Status words Live and Quiet.

Instagram@silveroakproperties Live
Comments
116
Most in two weeks
Messages
34
None answered
Comments replyLive
Comments moderationsLive
MessagesOff
FacebookSilver Oak Properties Quiet
Comments
12
Messages
—
Comments replyWaiting for your OK
Comments moderationsWatching only
MessagesNot built
WhatsApp+971 4 512 8840 Disabled
Messages
0
Nothing for 3 days
Quality ratingHigh
Messages0 of 1,000
Campaigns1 sending, 2 queued

"Waiting for your OK" — you were right to ask

It is correct on the reply row and it was wrong on the moderation row. Fixed above.

Comments reply, shadow. Verified in comment-pipeline.ts:783-810: shadow creates a waiting approve review item carrying the draft, sets the comment to held, and your accept sends the real reply through the review path. The code's own words: "Shadow no longer means 'only log what it would do'; it means 'post only what the operator approves, item by item'." So the row genuinely is waiting for your OK, and Facebook runs the identical CommentPipeline — fb-comment.service.ts:93 calls it "the SAME code path as Instagram".

Comments moderation, shadow. Different behaviour entirely. The gate's own definition: "shadow = decide + log, act on NOTHING". Nothing is queued, there is nothing to approve, and no accept exists. "Waiting for your OK" was a lie there — it promised a decision you could make. It now reads Watching only.

That is one word standing for two different mechanisms, which is exactly how a status starts lying.

Messages, now current of max

Applied — WhatsApp reads 0 of 1,000. One consequence to name rather than let you find: the canary state now has nowhere to live on this card. The gate is canary — the bot answers an allowlist of 3 numbers and silently ignores everyone else — and the quota figure cannot say that. It is the most misreadable state in the product and it is now invisible.

Cheapest fixes: let the status pill carry it (Canary rather than Disabled when both are true), or append it — 0 of 1,000 · 3 numbers. I would put it on the pill, since it is a whole-channel fact rather than a row fact.

Second thing: "Messages" now means a gate state on Instagram (Off) and a quota on WhatsApp (0 of 1,000). Two different subjects under one label, across two cards. Deliberate, since only WhatsApp has a quota — but worth you knowing it is deliberate.

Facebook messaging, like Instagram

Noted as your ruling, and it is a real build, not a gate flip. Facebook Messenger today has no webhook ingestion, no normalized inbound adapter and no sender — the facebook:dms gate and channel profile exist only so the Playground can simulate a turn. Instagram DMs, by contrast, already receive (ungated, stored) with the send arm built dark, which is why Instagram's row can honestly read Off while Facebook's has to read Not built.

Reaching Instagram's parity means the inbound half first — ingestion plus adapter — at which point the Facebook row stops saying Not built and starts saying Off, and the Messages tile stops reading an em dash and starts reading a real count. The sender is the second half and the gate is the last step.

What this card costs to build

ElementStatusWhat it needs
Status pill, all six statesfreeconnection, mute and silence are all on the payload
WhatsApp · Quality ratingfreealready fetched by the old Home
WhatsApp · CampaignsfreeHomeToday.campaigns
Instagram · Comments reply, moderationsfreethe two gates already exposed
WhatsApp · Messages (0 of 1,000)freethe messaging quota the old Home already fetches
Canary, wherever it landsowedthe mode is sent, the allowlist count is not
Instagram · Messages rowowedinstagram:dms gate
Comments and Messages counted apartowedtoday Instagram's figure is the comment stream alone
The sparkline and 3 of 4 captionsoweda 14-point daily series per channel
The entire Facebook cardoweda third member on HomeChannel, a facebook key in WEBHOOK_SOURCE and in HomeToday.messages, its errors, and both its gates
Facebook messaging, like InstagramowedMessenger ingestion + inbound adapter, then a sender. Not a gate flip

Everything on the Instagram and WhatsApp cards is one small payload change away except the sparkline. Facebook is the whole job, and it is the one you named.