Sentiment
Definition
Pillar III of the Commitment Flow Score: how the Knight felt about a commitment at the moment they Handshake it. Captured as one of four optional chips — Confident, Comfortable, Stretched, Overwhelmed — or skipped entirely. Display-only: Sentiment is never weighted into the numeric Flow Score, Ghost Rate, or Reciprocity axes.
Avoid: mood, morale, satisfaction (Sentiment is a single acceptance-time signal, not an ongoing measure of either).
Role
Sentiment closes the last spec gap in the CFS: Reliability and Reciprocity both measure whether commitments were kept, but neither says anything about the human cost of keeping them. A team can post a clean Flow Score while quietly running its Knights into the ground — Sentiment is the signal that catches that before it shows up as a resignation or a rising Ghost Rate.
The prompt appears inline on the Accept action in the Accord — tapping Accept expands a 4-chip-plus-Skip panel before the Handshake completes. Selecting a chip or Skip both fire the same acceptShrubbery() action; Skip is zero-friction, not a harder path than answering. Nothing is asked of the Lead or the Squire — Sentiment is a Knight-only signal, and only at the moment of acceptance.
computeCfs() aggregates it behind an includeSentiment flag into a { confident, comfortable, stretched, overwhelmed, skipped } count, scoped to the same rows as Reciprocity (subject as assignee) and windowed on activated_at rather than replayed status. It surfaces as a stacked distribution bar on /home and a compact chip row on the Knight Dossier — both hidden when the count is all-zero, so an unanswered team never renders an empty chart.
Lifecycle
Not a stateful concept on the Shrubbery side — Sentiment is written once and never edited:
- Unset — the default. A Shrubbery that has never reached
Active, or one accepted before this column existed, has no Sentiment. - Recorded — set the instant
Pending_Handshake→Active, from the Knight's chip choice. Immutable afterward. - Skipped — set the instant
Pending_Handshake→Active, with no chip choice (NULL). Indistinguishable in storage from "unset," and identical in the aggregate (skipped). - Dropped from the aggregate, not deleted — a Renegotiation clears the row's
activated_aton revert toPending_Handshake, which drops it out of window membership for the Sentiment aggregate until the Knight re-Handshakes. The storedacceptance_sentimentvalue itself is untouched.
Related guides
Last updated: 7 July 2026