ShrubberyDocs
Sign in

Commitment Flow Score (CFS)

Definition

The composite team-health metric. The CFS rolls up three pillars — Reliability (Say-Do Ratio on delivered commitments, read as two gauges: Flow Score and Ghost Rate, because delivering more and ghosting less are not the same improvement and collapsing them would hide one behind the other), Reciprocity (the Lead's own Say-Do on rows where they are the assignee), and Sentiment (how the Knight felt at Handshake acceptance — display-only, never weighted into the score).

Role

The CFS is the headline number on the Garden — the Lead's reliability receipt for the team they manage. It exists to make the human side of commitments measurable without falling back to engagement metrics (open rates, time-on-page) that miss the point. The CFS only counts rows that received an explicit Handshake; nothing accumulates against a Knight who was never given the chance to consent.

Calculation lives behind the canonical computeCfs() engine in src/lib/metrics/cfs.ts and runs server-side on every CFS surface (home, activity, team, dossier, and the 7-point trend). The composite is presented as separate gauges rather than a single number so the failure mode is legible (high Ghost Rate + high Flow Score reads very differently from low Flow Score + low Ghost Rate) — Sentiment adds a fourth, unscored gauge on top: the same reliability numbers can hide a team that is quietly overloaded.

Lifecycle

Not a stateful concept — see cfs-rules for the precise inclusion rules. The CFS is recomputed on read; no row is "in" the CFS as a stored attribute.

The scored axes have distinct entry rules:

  • Flow Score — enters denominator at Pending_HandshakeActive. Enters numerator at ActiveCompleted if completed_at <= deadline.
  • Ghost Rate — enters numerator at Pending_HandshakeRefused or Pending_Handshake ages out.
  • Reciprocity — same arithmetic as Flow Score, restricted to rows where the Lead is the assignee.
  • Sentiment — not scored. Captured once, at Pending_HandshakeActive, from the Knight's optional 4-chip choice (or a skip, stored as NULL); aggregated into a display-only distribution, never a numerator/denominator pair.

Last updated: 7 July 2026