feat(jobs): emit job.enqueue + worktree.pruned audit rows

Deferred audit retrofits from Plan #5 self-review:
- WebhookNotifier now records a job.enqueue audit row after each
  successful repo.Enqueue (best-effort: failures are warn-logged, not
  propagated). Added optional audit.Recorder + *slog.Logger params to
  NewWebhookNotifier.
- WorktreePrune.executionPhase now records a worktree.pruned audit row
  after each successful FinishPruneSuccess. Added optional audit.Recorder
  param to NewWorktreePrune.
- app.go wires the existing auditRec into both constructors.
- integration_test.go: drop the _ = auditRec suppression and pass
  auditRec into the webhook notifier so the closed-loop test exercises
  the audit emit path.
This commit is contained in:
2026-05-06 13:35:45 +08:00
parent f6089ac5fb
commit b1ccce567e
6 changed files with 65 additions and 28 deletions
+2 -2
View File
@@ -254,7 +254,7 @@ func New(ctx context.Context, cfg *config.Config, dist embed.FS) (*App, error) {
Enabled: cfg.Notify.Webhook.Enabled,
Topics: cfg.Notify.Webhook.Topics,
Backoff: webhookBackoff,
}, clock.Real())
}, clock.Real(), auditRec, log)
notifyDispatcher.Register(webhookNotifier)
dispAdapter := dispatcherAdapter{d: notifyDispatcher}
@@ -269,7 +269,7 @@ func New(ctx context.Context, cfg *config.Config, dist embed.FS) (*App, error) {
runners.WorktreePruneConfig{
IdleThreshold: cfg.Jobs.WorktreePrune.IdleThreshold,
WarningLead: cfg.Jobs.WorktreePrune.WarningLead,
}, log)
}, log, auditRec)
attCleanupRunner := runners.NewAttachmentCleanup(
chatAttachmentAdapter{repo: chatRepo},
attachStorage,