Skip to content

build(deps): update Everruns and carry reasoning artifacts - #32

Merged
chaliy merged 2 commits into
mainfrom
eve/determined-heisenberg-yngjsr
Sep 15, 2026
Merged

chaliy merged 2 commits into
mainfrom
eve/determined-heisenberg-yngjsr

Conversation

@chaliy

@chaliy chaliy commented Sep 15, 2026

Copy link
Copy Markdown
Contributor

What changed

Moves 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 two variants, File and Reasoning, so Svit's 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.

Effect on callers: a host reading Svit::messages or recent_messages may now
observe ContentPart::Reasoning and ContentPart::File on assistant messages.
No effect on guest scripts — reasoning never reaches the guest.

Lampa renders readable reasoning on its own thinking channel and file parts by
filename.

A second commit updates rustls 0.23.43 to 0.23.45 and rustls-webpki 0.103.13
to 0.103.15 for RUSTSEC-2026-0285, which published on 2026-09-14 and failed this
PR's dependency audit. The advisory affects main equally, so this is a ported
fix 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 ContentPart variants broke Lampa's exhaustive match, and reasoning
artifacts 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, and
item_id. Every current provider verifies 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 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 a
    reasoning 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_channel and
    summary_reasoning_joins_its_segments (crates/lampa/src/tui.rs) cover both
    readable forms, Plain and Summary.
  • opaque_reasoning_never_reaches_the_screen asserts opaque-only reasoning is
    neither drawn nor allowed to pull a tool-only message out of the compact tool
    row.
  • file_attachments_render_with_their_filename covers file parts with and
    without a filename, and asserts the file id is never drawn.

Security

  • Threat IDs reviewed or added: TM-AUD-001 reviewed, none added.
  • Isolation, rollback, limit, and diagnostic effects: reasoning replay state
    stays host-owned. No builtin exposes thread messages and /thread remains
    bounded 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_payload
    fails closed on an oversized one exactly as before. Diagnostics narrow rather
    than widen: Lampa renders only ReasoningContentPart::display_text, and
    signature and encrypted are replay state rather than content and are never
    drawn.
  • New ambient authority: none.

Risk

  • Low
  • What can break: the reasoning part is new on assistant messages, so a host
    that assumed every ContentPart on an assistant message was text or a tool
    call will now see a variant it does not handle. Within this repository the
    only such consumer is Lampa, which this change updates.
  • Dependency review: cargo-audit was installed in this environment and
    cargo audit now exits clean, reporting only the four warnings deny.toml
    already allows. cargo-deny was not installed locally, so the new transitive
    crates (chrono-tz, fs2, phf, phf_shared) and the jsonschema 0.49 to
    0.54 upgrade were checked by hand against deny.toml and need no new
    allow-list entry; CI's Check licenses and sources step is the authoritative
    check 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

  • Tests added or updated
  • just pre-pr passes — all gates green, including audit once
    cargo-audit was installed; cargo-deny runs in CI only
  • Executable examples updated when public behavior changes — all 11
    acceptance examples pass unchanged; no example behavior changed
  • Knowledge and limitations updated when durable decisions change —
    knowledge/log.md, knowledge/foundations/process-model.md, CHANGELOG.md
  • Threat model updated for new attack surfaces — reviewed; no new attack
    surface, so no new threat ID

https://claude.ai/code/session_01WxSsxEaLaW6Pa29HVzjfoe

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
@chaliy
chaliy merged commit 8285efa into main Sep 15, 2026
8 checks passed
@chaliy
chaliy deleted the eve/determined-heisenberg-yngjsr branch September 15, 2026 04:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants