4 — 11 SEPTEMBER 2026

What didDavid do?

A short week · recency may reorder, never refuse · a customer’s PDFs, read past page one · a bot that knows when a question isn’t for it · nine merged

0MERGED
0OPENED
0REVIEW THREADS CLOSED
0STILL OPEN

SCROLL ↓

ACT I — RECENCY

Recency may reorder.It may not refuse.

The reason recency was rolled back · fixed and merged Friday

OLD ANSWER GATE · 30-DAY RECENCY0/60
NEW ANSWER GATE · 30-DAY RECENCY60/60

Benchmark questions that clear the answer gate · same documents in all 60 · rerun on the merged code

The rollback: with recency on, answers fell from 39 of 60 to 0 of 60 while effectively the same documents came backWHY
The answer gate was reading the decayed score. It now reads relevance from before decay, as the result floor already did#3679
The first draft passed its own test while doing nothing in production. Fixed by carrying the score through to where the gate reads itCAUGHT
Real answers held steady on the rerun: 54 of 60 with recency on, 55 with it offHELD
Every answer now says what it searched: Slack, HubSpot, Google Drive#3666
Sandbox check on a staging copy: 697 of 698 connections had no last-synced stamp, so that footer reads last activity insteadSANDBOX
Next gap, in draft: a 30-day pass for “what’s current?” questions, so a fresh document reaches the pool at all#3685
Found on the way: a Slack channel is dated by its oldest message, so no date window reaches yesterday’s message in an old channelFINDING

A colleague reran the 60-question benchmark on the exact code that merged, in a staging sandbox. Recency can now reorder answers without deleting them. Whether it should be on by default is a separate question, and the follow-up recommends keeping it optional for now.

ACT II — THE PDFs

Only page onewas being read.

Customer-reported · two bugs, both silent · opened and merged the same day

1/5 → 5/5

Pages with content · a real customer PDF · production’s own parser, before and after

Every integration asked for the fast text layer, which never OCRs a scanned pageCAUSE
The fallback check quit once page one looked fine, and never changed the strategy anywayCAUSE
Five pages is under the page-cap warning, so the result was page one, marked complete, nothing saidSILENT
Found while verifying: production’s parser was OCRing the scans upside-down. Plenty of characters, none of them readableBUG TWO
Now: probe a few pages (about 25 ms), OCR the scanned ones when affordable, turn them upright first#3682
When OCR can’t run, the document names its missing pages instead of claiming it’s completeNEVER SILENT

The reproduced case was a typed invoice with signed, scanned delivery tickets behind it. Checked on real customer PDFs against production’s own parse image, before and after, with 42 new tests and a kill switch.

ACT III — THE SLACK BOT

Not every questionis for the bot.

Two bad replies in #dev, fifty-five minutes apart · three bugs · merged by Friday

COLLEAGUE@david can you hop on a call now?
DAVIDLink me?
THE BOTYou’re already linked! ✅
DAVIDOk, I’m gonna fix this.
The gate judged each message alone; now it reads the lines around it#3688
A conversation has two ends, and only one of them types the @mentionBOTH ENDS
The agent never knew the date: a close date that passed on 31 August was still “at risk” on 9 SeptemberDATED
Every new failure falls back to the old behaviour, capped at 4 seconds, never to silenceFAILS SAFE
Five review findings, each written as a test before any code moved: four failed and were fixed, one passed4 + 1
The reverse: a customer asked a follow-up in a thread the bot had been asked into, with no re-mention, and got silence. Now it answers#3726
Quieter cards in a thread: the scope note and tip once, no input box, the answer first and no narrating the planQUIETER
“Ask Hyperspell about it” in any message’s menu: the context behind that message, privately, in any channel#3717

The other bad reply answered a colleague asking whether a call had been pushed back. The PR also names what code can’t fix: a coordination room like #dev shouldn’t be an ask-channel at all. That’s a settings change, not a patch.

01 — AFTER LAST WEEK’S COUNT

Three morefor the Slack bot.

Merged last Friday, after this page went up · twenty review threads, all resolved

An answer’s footer teaches one thing at a time: a different tip about what the bot can do#3602
A field under the follow-up chips for the reader’s own question, for when the bot’s guesses miss#3606
One Off / Ask / Proactive picker per channel, replacing two lists that were really one decision#3609
02 — THE SHAPE OF IT

A short week,two full days.

Twelve opened · nine merged · four still open

MERGEDOPENED

#3725+192

Lets a stuck Linear connection catch up on just what changed. For one customer frozen since 29 August, a read-only test walk found 836 changed issues, 661 never indexed.

IN REVIEW · AUTO-MERGE ON
#3718+1,187

While the bot thinks, its placeholder shows the work: each search it runs, ticked off as results land. Never a zero, and never at the answer’s expense.

IN REVIEW
#3719+627

Specs, no code yet, for three more cards: a brief on any name, meeting prep, and what changed in a window.

DRAFT
#3685+1,234

A fresh-window pass for “what’s current?” questions. Exploratory and off by default, opened to share its measurements.

DRAFT

Wednesday opened five pull requests, and the PDF fix went from opened to merged that evening. Friday merged five and opened five more, every merge through the merge queue with its checks green. 82 of 83 review threads are resolved; the last one is on #3718.

03 — THE COUNT

Where it landed.

Nine merged, four open · recency made safe · one customer bug closed

0MERGED
0STILL OPEN
0OPENED
0REVIEW THREADS CLOSED