repoHealth() returned ok without ever consulting lastSyncedRefs, and
enrollRepo() sets status: 'active' as soon as the knot returns a
repoDid -- so green was the default state right after enrollment, not
evidence of a sync. This is the fix for #11's headline complaint: mirrors
the appview never indexed reported as "mirrored and up to date."
Adds a refCount input and a neutral awaiting-push state. Deliberately
not an alarm: zero refs is legitimate for a repo with no commits since
install, since the initial clone is the knot's own job.
Additive -- no existing state's behavior changes, and needsAttention is
untouched. Reaches four files (repo-health.ts, dashboard.get.ts,
dashboard.vue, tests) because a new state needs a badge and a summary
line, so it carries the only user-facing copy of the four.
Tests: full unit suite passes. Updates repo-health.spec.ts: the shared
input default gains refCount: 1, the now-obsolete "ok regardless of
relayed pushes" case is removed, and three are added -- the
awaiting-push state itself, plus error and behind each still winning
over it.