Files
beardrive/internal/webapp/static
Snow LeeandClaude Opus 5 20a99a8a3c feat(notify): tell your channel who changed what (BEA-103)
A teammate's agent writes a decision into runbook.md, it lands in your
folder in fifteen seconds, and nothing tells you. Two halves of the fix:

post_sync's payload gains `user` and `note` per changed entry, so a
local recipe can post "Dana's Claude updated shared/findings/eu-checkout.md"
instead of "1 file changed" — the copy was blocked by the payload, not by
formatting. journal.LastOps is what makes it possible: Replay drops deleted
paths and FileState carries no author, so deletes had nothing to attribute
to. Less, Replay and FileState are untouched.

And a hub-side webhook: one optional Webhook on Project, admin-set, https
on Slack/Teams hosts only, never returned by any API. It fires AFTER the
response from both places an op is born — handleStorePut and
RemoteSource.OnCommit at the end of appendOps, which covers uploads,
removes, restores and undo-run in one field. Goroutine, bounded client,
log once, no retry queue: a slow Slack must never 502 a push, because the
client retries a 502 and the retry re-fires the webhook.

A project with no webhook set produces zero new behavior and zero new
outbound requests.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 09:21:46 -07:00
..