ShrubberyDocs
Sign in

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_HandshakeActive, from the Knight's chip choice. Immutable afterward.
  • Skipped — set the instant Pending_HandshakeActive, 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_at on revert to Pending_Handshake, which drops it out of window membership for the Sentiment aggregate until the Knight re-Handshakes. The stored acceptance_sentiment value itself is untouched.

Last updated: 7 July 2026