build(deps): update Everruns and carry reasoning artifacts - #32
Merged
Merged
Conversation
Move the pinned Everruns workspace from 66c20400 to 74841cbb (everruns 0.18.2 to 0.21.0, everruns-host 0.20.1 to 0.21.0, everruns-provider 0.22.0). ContentPart gained File and Reasoning variants, so the message boundary now carries file references and provider reasoning artifacts without host translation. Everruns is a sibling project, so its types are re-exported directly rather than wrapped: svit re-exports ReasoningContentPart and ReasoningText. A reasoning part carries readable text alongside opaque provider replay state. Providers verify that state against the exact position it was issued in, so the canonical event stream stores the part whole and the projection returns it unchanged. That state stays host-owned: no builtin exposes thread messages and /thread remains bounded metadata, so the bump adds no guest-visible surface. Lampa renders readable reasoning on its own thinking channel and file parts by filename. Signatures and encrypted payloads are replay state rather than content and are never drawn, and opaque-only reasoning does not pull a tool-only message out of the compact tool row. Tests cover the event-stream round trip, both readable reasoning forms, opaque reasoning staying off the screen and out of /thread, and file parts with and without a filename. Claude-Session: https://claude.ai/code/session_01WxSsxEaLaW6Pa29HVzjfoe
TLS 1.3 handshake messages were incorrectly accepted across encryption level boundaries in rustls before 0.23.45 (RUSTSEC-2026-0285, medium). The advisory published on 2026-09-14, so main carries the same affected 0.23.43 and the dependency audit fails there too. The fix is a lockfile bump, so it is ported here rather than leaving this branch red. rustls 0.23.43 to 0.23.45, rustls-webpki 0.103.13 to 0.103.15. Both are transitive dependencies reached through reqwest; no source change and no new allow-list entry. cargo audit now exits clean, reporting only the four warnings deny.toml already allows. Claude-Session: https://claude.ai/code/session_01WxSsxEaLaW6Pa29HVzjfoe
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
Moves the pinned Everruns workspace from
66c20400to74841cbb(everruns0.18.2 to 0.21.0,
everruns-host0.20.1 to 0.21.0,everruns-provider0.22.0).ContentPartgained two variants,FileandReasoning, so Svit's messageboundary now carries file references and provider reasoning artifacts without
host translation. Everruns is a sibling project, so its types are re-exported
directly rather than wrapped:
svitre-exportsReasoningContentPartandReasoningText.Effect on callers: a host reading
Svit::messagesorrecent_messagesmay nowobserve
ContentPart::ReasoningandContentPart::Fileon assistant messages.No effect on guest scripts — reasoning never reaches the guest.
Lampa renders readable reasoning on its own
thinkingchannel and file parts byfilename.
A second commit updates
rustls0.23.43 to 0.23.45 andrustls-webpki0.103.13to 0.103.15 for RUSTSEC-2026-0285, which published on 2026-09-14 and failed this
PR's dependency audit. The advisory affects
mainequally, so this is a portedfix rather than fallout from the Everruns bump; it is a lockfile-only change on
transitive dependencies reached through
reqwest.Why
Keeping the pinned sibling dependency current. The bump is not mechanical: the
two new
ContentPartvariants broke Lampa's exhaustive match, and reasoningartifacts carry opaque provider replay state that needed a decision about where
it may and may not travel.
A reasoning part carries readable text alongside
signature,encrypted, anditem_id. Every current provider verifies that state against the exact positionit was issued in, so the canonical event stream stores the part whole and the
projection returns it unchanged rather than flattening or dropping it.
Before / after
Five new tests, all failing-to-passing in the sense that the surface they pin
did not exist before the bump:
reasoning_artifacts_survive_the_canonical_event_projection(
crates/svit/src/reasoning.rs) appends an assistant message carrying areasoning part through the event log and asserts the part returns identical,
and that neither the signature nor the encrypted payload appears in
/thread.readable_reasoning_renders_on_its_own_channelandsummary_reasoning_joins_its_segments(crates/lampa/src/tui.rs) cover bothreadable forms,
PlainandSummary.opaque_reasoning_never_reaches_the_screenasserts opaque-only reasoning isneither drawn nor allowed to pull a tool-only message out of the compact tool
row.
file_attachments_render_with_their_filenamecovers file parts with andwithout a filename, and asserts the file id is never drawn.
Security
TM-AUD-001reviewed, none added.stays host-owned. No builtin exposes thread messages and
/threadremainsbounded metadata, so the bump adds no guest-visible surface and needs no new
threat ID. A reasoning part is ordinary guest-shaped JSON measured against the
same process limits as any other event payload, so
validate_event_payloadfails closed on an oversized one exactly as before. Diagnostics narrow rather
than widen: Lampa renders only
ReasoningContentPart::display_text, andsignatureandencryptedare replay state rather than content and are neverdrawn.
Risk
that assumed every
ContentParton an assistant message was text or a toolcall will now see a variant it does not handle. Within this repository the
only such consumer is Lampa, which this change updates.
cargo-auditwas installed in this environment andcargo auditnow exits clean, reporting only the four warningsdeny.tomlalready allows.
cargo-denywas not installed locally, so the new transitivecrates (
chrono-tz,fs2,phf,phf_shared) and thejsonschema0.49 to0.54 upgrade were checked by hand against
deny.tomland need no newallow-list entry; CI's
Check licenses and sourcesstep is the authoritativecheck and passes on the current head. That step was skipped on the first
commit because the advisory failure short-circuited the job ahead of it.
Checklist
just pre-prpasses — all gates green, includingauditoncecargo-auditwas installed;cargo-denyruns in CI onlyacceptance examples pass unchanged; no example behavior changed
knowledge/log.md,knowledge/foundations/process-model.md,CHANGELOG.mdsurface, so no new threat ID
https://claude.ai/code/session_01WxSsxEaLaW6Pa29HVzjfoe