Skip to content

fix: debug output capturing for TUI / panics - #827

Merged
i386 merged 4 commits into
mainfrom
fix/proto-stderr
Jun 13, 2026
Merged

fix: debug output capturing for TUI / panics#827
i386 merged 4 commits into
mainfrom
fix/proto-stderr

Conversation

@ndizazzo

@ndizazzo ndizazzo commented Jun 11, 2026

Copy link
Copy Markdown
Collaborator

Summary

This fixes two terminal-output issues:

  • noq_proto transport warnings are now normalized into normal mesh events instead of surfacing as raw ANSI-formatted stderr: lines in the TUI.
  • Runtime panics now restore the TUI terminal before panic output and emit a structured fatal event.

What changed

Clean noq_proto event routing

MeshTracingStderrWriter now detects tracing targets beginning with noq_proto, strips ANSI escape sequences, normalizes formatted tracing output, and re-emits it with a transport context.

Example normalized output:

transport: failed closing path (err=LastOpenPath)
instead of raw formatted output like:
stderr: [2m2026-... [33m WARN [2mnoq_proto::connection...

Fatal event support
Added a first-class fatal output level and event shape:

  • OutputLevel::Fatal
  • OutputEvent::Fatal

Fatal events now render through the JSON, pretty, and TUI event paths.

Panic-safe terminal recovery
Installed a process panic hook after output initialization. On panic, mesh-llm now:

  1. Restores the TUI terminal synchronously.
  2. Disables raw mode.
  3. Writes a structured fatal event directly through the selected output format.
  4. Delegates to the previous/default panic hook so normal Rust panic diagnostics still appear.

This avoids panic text being painted over the alternate-screen TUI.

Validation

  • lsp_diagnostics: clean on changed files
  • cargo test -p mesh-llm-host-runtime tracing_messages --lib: passed
  • cargo test -p mesh-llm-tui fatal --lib: passed
  • cargo clippy -p mesh-llm --all-targets -- -D warnings: passed
  • just build: passed
  • git diff --check: clean

Manual QA
Verified the terminal surface in tmux:

  • ./target/debug/mesh-llm --help renders normally
  • invalid CLI input returns expected clap error output
  • missing GGUF path emits structured JSON with:
  • "event":"fatal"
  • "level":"fatal"
  • "error_type":"missing_gguf"

Summary by CodeRabbit

  • New Features
    • Added a distinct "Fatal" event severity with dedicated FATAL badge, aligned layout, JSON fatal field, emergency fatal APIs, and terminal panic hook to restore TUI and emit fatal reports
  • Bug Fixes
    • Normalize routed stderr output (strip ANSI, tag transport context, centralize event creation) and stop non-fatal errors from guessing/updating the last-running model status
  • Tests
    • Added coverage for fatal events, panic handling, normalization, startup-history behavior, and TUI panic/restore lifecycle

@ndizazzo
ndizazzo requested review from i386 and michaelneale June 11, 2026 05:00
@ndizazzo ndizazzo self-assigned this Jun 11, 2026
@coderabbitai

coderabbitai Bot commented Jun 11, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 61671698-7feb-4da8-9ad3-6aab8583a2d8

📥 Commits

Reviewing files that changed from the base of the PR and between b141e99 and 668f988.

📒 Files selected for processing (1)
  • crates/mesh-llm-tui/src/output/mod.rs
🚧 Files skipped from review as they are similar to previous changes (1)
  • crates/mesh-llm-tui/src/output/mod.rs

📝 Walkthrough

Walkthrough

This PR introduces a Fatal event severity throughout the event system, refactors tracing output normalization in the host runtime, enables TUI rendering of fatal events with distinct badges, and installs a global panic hook to emit panic information as fatal events with source location context.

Changes

Fatal event system and panic handling

Layer / File(s) Summary
Fatal event contract and helpers
crates/mesh-llm-events/src/lib.rs
OutputLevel and OutputEvent enums gain Fatal variant; helpers (event_name, level, message, as_str) are extended to handle Fatal.
Tracing message normalization and routing
crates/mesh-llm-host-runtime/src/runtime/mod.rs
MeshTracingStderrWriter refactored to normalize tracing output before dashboard emission: ANSI sequences are stripped, noq_proto messages use transport context via new helpers, and OutputEvent creation is centralized via a level-aware mapper; unit tests verify normalization and ANSI stripping.
Panic hook installation and helpers
crates/mesh-llm-tui/src/lib.rs, crates/mesh-llm/src/lib.rs
Adds install_terminal_panic_hook plus helpers to extract panic message/context and a test that verifies delegation to the previous hook; CLI startup now installs the hook before runtime startup.
TUI rendering, JSON, and startup lifecycle
crates/mesh-llm-tui/src/output/mod.rs
Fatal events render with distinct FATAL badge (bold, error color); event-level width and prefix/truncation math adjusted; JSON serialization for error/fatal unified via classified_error_json; Fatal treated like Error for startup failure marking but excluded from startup-history slots; removes prior Error-based last-running-model status guessing.
TUI entry tracking and output manager wiring
crates/mesh-llm-tui/src/output/mod.rs
Adds atomic tui_entered and panic_restored flags threaded through formatter selection and OutputManager worker state, exposes accessor and mark methods, and updates worker/command handling.
Emergency fatal emission and TUI restoration
crates/mesh-llm-tui/src/output/mod.rs
Adds emit_fatal_panic plus emergency rendering/write helpers to immediately emit fatal events without the dashboard worker, and force_restore_tui_after_panic() to conditionally restore TUI and disable raw mode; tests added for emergency rendering and JSON fields.

🎯 3 (Moderate) | ⏱️ ~25 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 28.40% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'fix: debug output capturing for TUI / panics' directly describes the main changes: fixing debug/stderr output handling for the TUI and adding panic recovery support.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/proto-stderr

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/mesh-llm-tui/src/output/mod.rs`:
- Around line 8487-8490: The panic-time TUI restore always emits terminal escape
sequences; change force_restore_tui_after_panic so it first checks an “TUI
active” condition before calling force_restore_tui_terminal() and
disable_raw_mode(). Locate the function force_restore_tui_after_panic and add a
guard that returns early when the TUI has not been entered (either consult an
existing session-mode check or a dedicated boolean like tui_entered flag), and
ensure the flag is set when the alternate screen / raw mode is actually enabled
elsewhere so only active interactive sessions trigger the restore on panic.
- Around line 7044-7046: startup_history_summary() is currently including
OutputEvent::Fatal in the branch that returns Some(event.summary_line()), which
causes fatal events to consume startup-history slots; update the match arm so
Fatal is excluded (only keep Error and Warning returning
Some(event.summary_line())), ensuring OutputEvent::Fatal is still handled
elsewhere to influence failure state but not produce startup-summary entries;
reference the startup_history_summary function and the OutputEvent::Fatal and
summary_line() symbols when making the change.

In `@crates/mesh-llm/src/lib.rs`:
- Around line 54-78: The panic-hook implementation (install_terminal_panic_hook)
and its helpers (panic_message, panic_context) were added directly in
crates/mesh-llm/src/lib.rs and must be moved into the owning crate
(mesh_llm_tui) so mesh-llm remains a thin shim; remove these functions from
lib.rs and expose a simple API in mesh_llm_tui (e.g., pub fn
install_terminal_panic_hook() that calls force_restore_tui_after_panic and
emit_fatal_panic with formatted panic_message/panic_context), then call that new
API from mesh-llm’s wiring code; ensure the helper logic for extracting payload
and location is implemented inside mesh_llm_tui so mesh-llm only invokes
mesh_llm_tui::install_terminal_panic_hook() and contains no
panic-formatting/domain logic.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 6d9f90ce-558c-4014-b99b-1552ba5f964f

📥 Commits

Reviewing files that changed from the base of the PR and between 57a3c24 and 7340fc9.

📒 Files selected for processing (4)
  • crates/mesh-llm-events/src/lib.rs
  • crates/mesh-llm-host-runtime/src/runtime/mod.rs
  • crates/mesh-llm-tui/src/output/mod.rs
  • crates/mesh-llm/src/lib.rs

Comment thread crates/mesh-llm-tui/src/output/mod.rs
Comment thread crates/mesh-llm-tui/src/output/mod.rs
Comment thread crates/mesh-llm/src/lib.rs Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
crates/mesh-llm-tui/src/lib.rs (1)

16-17: ⚡ Quick win

Call the owning module directly in the new panic path.

These calls currently resolve through pub use output::*, which makes new code depend on the transitional root re-export. Point them at output::force_restore_tui_after_panic() / output::emit_fatal_panic(...) instead so the shim can be removed cleanly later.

Suggested change
-            force_restore_tui_after_panic();
-            let _ = emit_fatal_panic(panic_message(info), panic_context(info));
+            output::force_restore_tui_after_panic();
+            let _ = output::emit_fatal_panic(panic_message(info), panic_context(info));

As per coding guidelines, crates/*/src/lib.rs: "Root re-exports are acceptable as temporary compatibility shims during refactors. New code should prefer importing from the owning module directly. Remove transitional re-exports once call sites have been updated."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/mesh-llm-tui/src/lib.rs` around lines 16 - 17, Update the two calls to
use the owning module directly: replace force_restore_tui_after_panic() with
output::force_restore_tui_after_panic() and replace
emit_fatal_panic(panic_message(info), panic_context(info)) with
output::emit_fatal_panic(panic_message(info), panic_context(info)); this removes
reliance on the root re-export and lets the transitional shim be removed later.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/mesh-llm-tui/src/lib.rs`:
- Around line 49-89: This test currently installs the global panic hook via
install_terminal_panic_hook() and never restores the previous global hook,
leaking process-global state; fix by calling std::panic::take_hook() before
install_terminal_panic_hook() (store into a variable like previous_hook), run
the test (the existing panic::catch_unwind block), and then restore the original
hook with std::panic::set_hook(previous_hook) at the end (ensure restoration
runs after the catch_unwind so the previous hook is always set back).

In `@crates/mesh-llm-tui/src/output/mod.rs`:
- Line 357: The level column is too narrow so the "FATAL" badge collides with
the message; update the layout to reserve an extra column by increasing
PRETTY_TUI_EVENT_LEVEL_WIDTH from 5 to 6 or, alternatively, ensure the renderer
appends an explicit single space after the level badge where
PRETTY_TUI_EVENT_LEVEL_WIDTH is used (the badge formatting/rendering code that
produces the TUI event line). This change will restore the gap between the level
badge and the message across all render paths that rely on
PRETTY_TUI_EVENT_LEVEL_WIDTH.
- Around line 2482-2485: The match arm that treats OutputEvent::Error and
OutputEvent::Fatal the same is incorrectly marking running_models.last_mut() as
Error for process-level Fatal events; change the match so only
OutputEvent::Error { .. } updates the last running model's status
(RuntimeStatus::Error) and do not map OutputEvent::Fatal { .. } onto
running_models.last_mut(); leave Fatal unhandled here until Fatal includes a
model identity (also note upsert_model() can reorder running_models, so avoid
assuming last_mut() is the failing model).

---

Nitpick comments:
In `@crates/mesh-llm-tui/src/lib.rs`:
- Around line 16-17: Update the two calls to use the owning module directly:
replace force_restore_tui_after_panic() with
output::force_restore_tui_after_panic() and replace
emit_fatal_panic(panic_message(info), panic_context(info)) with
output::emit_fatal_panic(panic_message(info), panic_context(info)); this removes
reliance on the root re-export and lets the transitional shim be removed later.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 696dc75f-551b-43bd-915a-cd424131307f

📥 Commits

Reviewing files that changed from the base of the PR and between 7340fc9 and da492bb.

📒 Files selected for processing (5)
  • crates/mesh-llm-events/src/lib.rs
  • crates/mesh-llm-host-runtime/src/runtime/mod.rs
  • crates/mesh-llm-tui/src/lib.rs
  • crates/mesh-llm-tui/src/output/mod.rs
  • crates/mesh-llm/src/lib.rs
🚧 Files skipped from review as they are similar to previous changes (2)
  • crates/mesh-llm-host-runtime/src/runtime/mod.rs
  • crates/mesh-llm-events/src/lib.rs

Comment thread crates/mesh-llm-tui/src/lib.rs
Comment thread crates/mesh-llm-tui/src/output/mod.rs Outdated
Comment thread crates/mesh-llm-tui/src/output/mod.rs Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
crates/mesh-llm-tui/src/output/mod.rs (1)

8522-8531: ⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Panic-time restore doesn’t deactivate the dashboard worker.

This helper restores the terminal out-of-band, but it never clears the worker/formatter state that still drives render_if_dirty(). If the panic unwinds a background task instead of terminating the process, the redraw loop can keep painting after the fatal line and default panic diagnostics. Clear the shared TUI-active state as part of emergency restore, or have the interactive formatter observe a shared “panic restored” flag before redrawing.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/mesh-llm-tui/src/output/mod.rs` around lines 8522 - 8531,
force_restore_tui_after_panic restores the terminal but doesn’t deactivate the
background dashboard worker or clear the TUI-active state, so render_if_dirty
can continue repainting after a panic; update this function to, after confirming
GLOBAL_OUTPUT_MANAGER.get().is_some_and(...), explicitly clear the
TUI-active/dashboard state on the manager (e.g. call the manager method that
unsets tui_entered / stops the dashboard worker and disables the interactive
formatter) before calling force_restore_tui_terminal() and disable_raw_mode(),
and also ensure render_if_dirty / the interactive formatter observes a shared
“panic restored” flag on GLOBAL_OUTPUT_MANAGER to skip redraws when set.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/mesh-llm-tui/src/output/mod.rs`:
- Around line 2482-2485: The handler for OutputEvent::Error must not guess which
model failed by mutating running_models.last_mut(); instead either include model
identity on OutputEvent::Error or stop per-model mutations here—update the match
arm for OutputEvent::Error to remove the code that sets model.status =
RuntimeStatus::Error (and optionally record the error in a global/session-level
error field or log it), and if you choose to propagate identity, modify the
OutputEvent::Error variant and the producers to carry the model id and then set
the specific model’s RuntimeStatus::Error; key symbols: OutputEvent::Error,
running_models, upsert_model(), RuntimeStatus::Error.

---

Outside diff comments:
In `@crates/mesh-llm-tui/src/output/mod.rs`:
- Around line 8522-8531: force_restore_tui_after_panic restores the terminal but
doesn’t deactivate the background dashboard worker or clear the TUI-active
state, so render_if_dirty can continue repainting after a panic; update this
function to, after confirming GLOBAL_OUTPUT_MANAGER.get().is_some_and(...),
explicitly clear the TUI-active/dashboard state on the manager (e.g. call the
manager method that unsets tui_entered / stops the dashboard worker and disables
the interactive formatter) before calling force_restore_tui_terminal() and
disable_raw_mode(), and also ensure render_if_dirty / the interactive formatter
observes a shared “panic restored” flag on GLOBAL_OUTPUT_MANAGER to skip redraws
when set.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 2dcc9a9e-99fc-4df2-bebc-21f0fe187aa0

📥 Commits

Reviewing files that changed from the base of the PR and between da492bb and b141e99.

📒 Files selected for processing (2)
  • crates/mesh-llm-tui/src/lib.rs
  • crates/mesh-llm-tui/src/output/mod.rs
🚧 Files skipped from review as they are similar to previous changes (1)
  • crates/mesh-llm-tui/src/lib.rs

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
crates/mesh-llm-tui/src/output/mod.rs (1)

8522-8531: ⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Panic-time restore doesn’t deactivate the dashboard worker.

This helper restores the terminal out-of-band, but it never clears the worker/formatter state that still drives render_if_dirty(). If the panic unwinds a background task instead of terminating the process, the redraw loop can keep painting after the fatal line and default panic diagnostics. Clear the shared TUI-active state as part of emergency restore, or have the interactive formatter observe a shared “panic restored” flag before redrawing.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/mesh-llm-tui/src/output/mod.rs` around lines 8522 - 8531,
force_restore_tui_after_panic restores the terminal but doesn’t deactivate the
background dashboard worker or clear the TUI-active state, so render_if_dirty
can continue repainting after a panic; update this function to, after confirming
GLOBAL_OUTPUT_MANAGER.get().is_some_and(...), explicitly clear the
TUI-active/dashboard state on the manager (e.g. call the manager method that
unsets tui_entered / stops the dashboard worker and disables the interactive
formatter) before calling force_restore_tui_terminal() and disable_raw_mode(),
and also ensure render_if_dirty / the interactive formatter observes a shared
“panic restored” flag on GLOBAL_OUTPUT_MANAGER to skip redraws when set.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/mesh-llm-tui/src/output/mod.rs`:
- Around line 2482-2485: The handler for OutputEvent::Error must not guess which
model failed by mutating running_models.last_mut(); instead either include model
identity on OutputEvent::Error or stop per-model mutations here—update the match
arm for OutputEvent::Error to remove the code that sets model.status =
RuntimeStatus::Error (and optionally record the error in a global/session-level
error field or log it), and if you choose to propagate identity, modify the
OutputEvent::Error variant and the producers to carry the model id and then set
the specific model’s RuntimeStatus::Error; key symbols: OutputEvent::Error,
running_models, upsert_model(), RuntimeStatus::Error.

---

Outside diff comments:
In `@crates/mesh-llm-tui/src/output/mod.rs`:
- Around line 8522-8531: force_restore_tui_after_panic restores the terminal but
doesn’t deactivate the background dashboard worker or clear the TUI-active
state, so render_if_dirty can continue repainting after a panic; update this
function to, after confirming GLOBAL_OUTPUT_MANAGER.get().is_some_and(...),
explicitly clear the TUI-active/dashboard state on the manager (e.g. call the
manager method that unsets tui_entered / stops the dashboard worker and disables
the interactive formatter) before calling force_restore_tui_terminal() and
disable_raw_mode(), and also ensure render_if_dirty / the interactive formatter
observes a shared “panic restored” flag on GLOBAL_OUTPUT_MANAGER to skip redraws
when set.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 2dcc9a9e-99fc-4df2-bebc-21f0fe187aa0

📥 Commits

Reviewing files that changed from the base of the PR and between da492bb and b141e99.

📒 Files selected for processing (2)
  • crates/mesh-llm-tui/src/lib.rs
  • crates/mesh-llm-tui/src/output/mod.rs
🚧 Files skipped from review as they are similar to previous changes (1)
  • crates/mesh-llm-tui/src/lib.rs
🛑 Comments failed to post (1)
crates/mesh-llm-tui/src/output/mod.rs (1)

2482-2485: ⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Stop guessing the failing model for generic OutputEvent::Error.

OutputEvent::Error still has no model identity, and upsert_model() keeps running_models sorted by name, so Line 2483 will flip an arbitrary model to Error in multi-model sessions. Either carry model identity on the event or stop mutating per-model state here.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/mesh-llm-tui/src/output/mod.rs` around lines 2482 - 2485, The handler
for OutputEvent::Error must not guess which model failed by mutating
running_models.last_mut(); instead either include model identity on
OutputEvent::Error or stop per-model mutations here—update the match arm for
OutputEvent::Error to remove the code that sets model.status =
RuntimeStatus::Error (and optionally record the error in a global/session-level
error field or log it), and if you choose to propagate identity, modify the
OutputEvent::Error variant and the producers to carry the model id and then set
the specific model’s RuntimeStatus::Error; key symbols: OutputEvent::Error,
running_models, upsert_model(), RuntimeStatus::Error.

@i386
i386 merged commit 4866fc9 into main Jun 13, 2026
25 checks passed
@i386
i386 deleted the fix/proto-stderr branch June 13, 2026 02:47
michaelneale added a commit that referenced this pull request Jun 13, 2026
* origin/main:
  Add transport-aware Skippy stage ordering (#814)
  Share Skippy stage wire byte accounting (#818)
  Report Skippy artifact cold-start costs (#815)
  fix: debug output capturing for TUI / panics (#827)
  fix(hero): visual corrections for iPhone SE size devices (#838)
  Add Skippy stage role metadata (#816)
  Add Skippy request cache epoch telemetry (#817)
  Consolidate agent skills and fix stale docs (Windows deploy, repo map, design docs) (#836)
  feature(version): normalize version markers for different build types (#831)
  fix(website): fix visual regressions (#835)
  fix(gh): change micn to michaelneale in auto_assign.yml
  Revert "fix(gh): replace micn with IvGolovach in auto_assign.yml (not a collaborator)"
  fix(gh): replace micn with IvGolovach in auto_assign.yml (not a collaborator)
michaelneale added a commit that referenced this pull request Jun 14, 2026
* origin/main: (29 commits)
  MoA: don't let small-model consensus pre-empt a still-running large model (#837)
  fix(console): render thinking traces as markdown
  Add bounded direct path repair (#846)
  Fix skippy smoke PR gate (#850)
  Stabilize skippy smoke chain startup (#849)
  fix(ci): switch back to auto-assign workflow
  fix(website): polish longform visual explainer (#843)
  fix: gemma thinking
  Carry GLM llama MTP patches (#840)
  Refresh llama.cpp canary patch queue (#839)
  Add transport-aware Skippy stage ordering (#814)
  Share Skippy stage wire byte accounting (#818)
  Report Skippy artifact cold-start costs (#815)
  fix: debug output capturing for TUI / panics (#827)
  fix(hero): visual corrections for iPhone SE size devices (#838)
  Add Skippy stage role metadata (#816)
  Add Skippy request cache epoch telemetry (#817)
  Consolidate agent skills and fix stale docs (Windows deploy, repo map, design docs) (#836)
  feature(version): normalize version markers for different build types (#831)
  fix(website): fix visual regressions (#835)
  ...

# Conflicts:
#	AGENTS.md
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