You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The background engine emitted nothing — no events, no fault reports — which made
it the least observable part of the app and the only part that runs with no user
present. Per-deployment counts existed but were manual-action counts only.
**The seam already existed.** Every outcome the engine produces already funnels
through `StatusReporter`, so telemetry is a decorating reporter rather than
`track()` calls threaded into the tick: one place to keep in step instead of two,
and the UI reporter keeps working untouched behind it. Emission is spawned, not
awaited — the trait is sync, telemetry is not, and the engine must not wait on a
network call to finish a tick.
Three events, under their own names:
- `autosync_published` — deliberately *not* `package_published`. Folding
unattended work into a series already read as user actions would redefine it
silently, which is the thing the name-continuity rule exists to prevent.
- `autosync_paused`, carrying the reason *category* only.
- `autosync_login_required` — the silent-failure signal: background sync stops
and nothing asks the user anything.
Two methods report nothing, on purpose. `report_status` fires per package per
tick and carries a fingerprint precisely so consumers can discard repeats — a
progress signal, not a countable act. A subscriber error becomes a **fault**
rather than an event, because the vocabulary carries no error events and the
filesystem watcher concerns no deployment; that path is only assertable because
of the seam #823 added.
**The host is required, not optional** — the tightening the host change left open,
available here for free. The loop already declines to work on a package whose
lineage has no origin, so that guard is the proof: every outcome it reports
concerns a known deployment. `report_published` and `report_paused` now take
`&Host`, with one call site each, no degradation anywhere.
`PausedKind` maps the engine's reason to a category and drops its contents. The
engine's own type carries conflicting file names, a role name and a free-text
message for the UI banner; none of it crosses into the vocabulary. A test feeds
all three through and asserts nothing leaked.
Attribution is proven through the real tick, not just the type: `RecordingReporter`
now records hosts, and the publish test asserts the reported host is the package's
own origin.
just lint 0, cargo fmt --check 0, 310 quilt-sync tests, workspace green.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
0 commit comments