28 AUGUST — 4 SEPTEMBER 2026

What didDavid do?

The Slack bot, eight features richer · one flag, three cells · walked the runbook, fixed what it found · fifty merged

0MERGED
0FOR THE SLACK BOT
0NEW BOT FEATURES
0STILL OPEN

SCROLL ↓

ACT I — THE SLACK BOT

Eight thingsthe bot couldn’t do.

Eight features · twelve pull requests · 9,769 lines · each with its spec and its tests

Share an ephemeral answer to the channel; suggest what to ask next#3581
“Catch me up” on a thread or channel, read live from Slack#3582
Ask-channels: rooms where every question is answered, no @mention#3583
The Personal Daily Brief, delivered by DM to an attested identity only#3584
The scoreboard on demand — reads the ledger, mints nothing#3585
App Home controls that actually work#3586
Standing questions: any question, on a schedule, set from Slack#3588
Every cited answer says how fresh its sources are#3590

Eight stacked PRs, each independently reviewable, each with its spec written alongside the code and sandbox-checked on real staging data where it touched the database. The bot went from answering questions to catching you up, briefing you, remembering what to ask, and telling you how fresh its sources are.

ACT II — THE GATE

One flag.Three cells.Fails closed.

slack-bot-preview · read at every rail, every card, every button

STAGING

Every app. The demo room.

100%

US PRODUCTION

Three internal apps, by slug. Everyone else: yesterday’s bot.

3 apps

EU PRODUCTION

Exists so promotion changes nothing. Dark.

0%
Off means off: no card control, no rail, stale buttons inert, sweeps skip without claimingEVERY PR
A flag read that fails resolves as off — a PostHog blip cannot turn a preview onFAIL-CLOSED
Review threads answered across the stack — fixed, or argued and kept229
Pulled back out of the merge queue rather than land a PR ungatedTWICE

The request came mid-stack: “gate all the new features behind a single feature flag, in case this gets promoted to prod by someone.” One helper, one flag, created in all three PostHog projects before the first merge. Each PR gates its own surfaces, so main was never ungated at any point in the order.

ACT III — TESTING IT FOR REAL

Walked the runbook.Found five things.

Tested feature by feature in #dev · every finding fixed and re-promoted the same day

3× → 1

invalid_blocks · three delivery attempts failed · one placeholder that never resolved

Every follow-up chip shared one action id; Slack rejected the card, the “Digging…” stayed forever#3601 · HOTFIX
A rejected card is now delivered as text, never left as a placeholder#3601
The ask-channel answered a statement about ask-channels — now a shape check, then a small model asks “is this for the bot?”#3599
The bot answered a reply that was addressed to a colleague#3599
“How did it decide on this?” — the brief now shows its sources and what it looked across#3599
“Where do I find all these?” — App Home says what the bot can do now#3599
Ask-channels configurable from the dashboard, both skins#3600

The stuck placeholder looked like a slow model. It was Block Kit: a block whose buttons share an action id is invalid, so any answer that earned two chips was undeliverable. Found in Loki, fixed in a hotfix, promoted together with the rest of the findings.

01 — THE REST OF IT

Thirty-eight more,including a Sunday.

Twelve merges on Sunday · one PR of 9,530 lines · Lightfield retired

OAuth for customer-hosted external MCP servers, hardened and managed#3372 · #3468
Incremental resync — a connection that falls behind no longer costs a full replay#3381
Gap-fill resync indexes only what was never ingested#3515
Register a connection’s webhooks without replaying its corpus#3509
Lightfield’s native client retired; the passthrough works again#3319 · #3449
Backfilled Slack channels depth-verified — presence is not coverage#3450
Gacha wallets keyed on the Slack user id, not a spoofable display name#3563
The address bridge reads the OAuth-captured address; SSO attestation required first#3559 · #3560
Slack bot settings send only changed fields — a stale tab can’t clobber another admin#3557
HubSpot walks paged by updated_at keyset; webhooks tried, reverted, finding corrected#3530 · #3573 · #3589
The Slack install callback bound to the browser that started it#3521
A diagnose-ingestion skill for per-app triage#3442
02 — STILL OPEN

Fifty landed.Seven are in review.

Forty-eight opened this week · fifty merged · seven of this week’s still open

MERGEDOPENED

An answer’s footer teaches one thing at a time — a rotating tip about what the bot can do.

IN REVIEW
#3472+357

GitLab as a service-account connection.

APPROVED · WAITING
#3456+241

Let any admin install the Slack bot, not just the app owner.

IN REVIEW
#3511+472

Resolve and store the Atlassian tenant a connection is metered against.

IN REVIEW
#3475+400

Resume a truncated Slack channel-directory walk instead of discarding it.

IN REVIEW
#3525+115

Accept the sweep’s own backfill finalization as completion evidence.

IN REVIEW

Friday is the only day that merged as much as it opened — fourteen and fourteen — because Friday was the day the bot stack landed and the runbook’s findings went straight back in. Everything the Slack bot needed is in; what’s open is the long tail.

03 — THE COUNT

Where it landed.

Fifty merged, seven open · one Slack bot, eight features richer

0MERGED
0STILL OPEN
0FOR THE SLACK BOT
0REVIEW THREADS CLOSED