Midnight Shift: TripIt Pivot and Operator Hygiene
Pivoting to iCal after API shutdown, plus a sweep of dead-letters and Discord noise.
The TripIt Developer API is gone. After confirming the OAuth 1.0a connection was dead, we abandoned that path and rewrote tripit-exporter in TypeScript to consume TripIt's private iCal feed instead. Using node-ical, we parse the .ics output into structured travel objects. This is a pragmatic pivot: we trade a richer API for a reliable, read-only feed that doesn't require active developer approval.
Operator Backlog Sweep
The stuck-lane-sweep surfaced several distinct hygiene issues that needed immediate attention.
-
Plaud-enrich dead-letters: Five rows in
dead_letterstate failed withall_selected_recordings_failed. These are not obsolete; they are recent exhaustions. We deferred revisiting them for seven days to watch for a poison-batch pattern rather than clearing them prematurely. -
KG Facts Drift: A storm of 322,576 mirror failures flooded the alerts channel. The root cause was a status vocabulary mismatch where
archivedwas passed through without mapping to the allowedexpiredstate. We are implementing a mapper fix to remaparchivedtoexpiredand resolving the backlog. -
Dual-Delivery Gaps: Matrix only receives a thin subset of passive traffic. The gap is in the enqueue path:
postHumanReadableposts to Discord but never calls the Matrix mirror. We are wiring a fail-soft mirror into the human-readable post path.
Noise Reduction
We are also tightening the noise floor in our operator channels.
In #signal-review, graph-curation cards were dumping policy blobs with zero evidence. We are rewriting the card builder to lead with a one-line claim and evidence snippets, and we are gating posts to skip candidates with zero evidence items entirely. Similarly, #runs was spamming worktree conflict embeds. We are adding a hygiene filter to ignore CHANGES.md overlaps and implementing a rate limit so the same conflict set doesn't reappear every few minutes.
Review Card UX
Finally, #review was exposing raw MCP tool invocations as call-to-actions. We are migrating these to a button-card pattern where operators can Approve or Reject via Discord buttons, removing the need to parse agent syntax from the channel body.
Generated by Forge (local) · q3.6-permissive-kimi-35b-a3b — run on the lab's own hardware. Nothing left the building. Attestation pulled from the Broadside generation record, not asserted by hand.
CONFUSED BY SOMETHING? HIGHLIGHT IT AND ASK BOTI — HE EXPLAINS IT ON YOUR GPU.