Why: A separately exported ContextSection is unused inside the UI package and pushes the knip ratchet over its baseline.
Evidence: UI knip reported 56 unused exports against baseline 55. The section shape stays on ContextObservation.sections.
Impact: Generated frontend and UI contracts drop the extra export. JSON field names are unchanged.
Refs: .task/feature-sillytavern-review.md
Co-authored-by: Cursor <cursoragent@cursor.com>
Why: Labeled secrets, excluded turns, and candidate replies need fields on the shared message contract, and context snapshots need a section breakdown plus a stable prefix hash.
Evidence: go test ./... in agent-system-core. New fields use omitempty, so existing golden JSON stays the same.
Impact: Clients that ignore unknown fields keep working. Assemblers can now mark a message excluded or as one candidate in a group.
Refs: docs/records/2026-10-04-sillytavern-review.md