OrchestKit has a SessionStart hook whose job is to say "your Claude Code is below the supported floor" or "you are ahead of what we have adopted". It read one environment variable that Claude Code does not set in a hook, and returned silent success when it was missing. So the only outcome it could ever produce was silence. Pick a source below and follow the resolution chain.
3542 / 3542
rows in the local sessions.db where cc_version is NULL.
session-registrar, a different hook reading the same variable. Every session ever registered on this machine recorded no version. That is what turns "the variable might be unset sometimes" into "it is never set".Once a version finally resolved, the nudge still would not have arrived. The adoption branch used outputPromptContext, which hardcodes:
On a SessionStart hook the runner strips that as an unknown response (#1794). Nobody had ever seen it, because nothing downstream of the unset variable ever executed.
outputSessionStartContext, which the sibling SessionStart hook already used.