Files
Kigi-CLI/crates/codegen/kigi-log/src/session_ctx.rs
T
ZacharyZhang-NY a02b555e66 docs(comments): rewrite comments across all crates to the guidelines
Sweep every first-party crate source (1956 .rs files) to the project comment
guidelines: delete redundant restatements, decorative banners, change
narration, and end-of-line comments; keep and tighten the crucial ones
(invariants, bug rationale, SAFETY blocks, ported-source attribution).

No functional code changed. Every edit is proven comment-only against the
prior tree by a comment-stripping lexer (string/char/raw-string aware) plus a
separate doctest-fence check. Where removing a comment made rustfmt or clippy
want to re-lay-out adjacent code, the minimal triggering comment is restored so
code tokens stay byte-identical.

Gates green: cargo fmt --all --check (0 diffs), cargo check and cargo clippy
--workspace --all-targets (0 warnings).

Adds scripts/check_codegen_comment_guidelines.py — the enforcement gate for
these guidelines (flags banners, end-of-line comments, change narration, and
commented-out code).
2026-07-23 16:55:39 -04:00

48 lines
1.9 KiB
Rust

//! Ambient per-session tracing span for log routing.
//!
//! The `--debug` firehose router ([`crate::debug_log`]) fans events out to
//! `~/.kigi/debug/<session_id>.txt` by finding the enclosing session span's
//! `session_id` field. [`with_session_ctx`] installs that span for the
//! duration of a session's work.
/// The field name the firehose router keys on: `debug_log::SessionIdVisitor`
/// stashes a `SessionId` extension on any span carrying this field — the span
/// *name* is not load-bearing for routing.
pub(crate) const SESSION_ID_FIELD: &str = "session_id";
/// The field name MUST be the literal `session_id` (tracing field names can't
/// come from a const); the test below pins it against [`SESSION_ID_FIELD`].
fn session_span(session_id: &str) -> tracing::Span {
tracing::info_span!("session", session_id = %session_id)
}
/// Run `fut` inside the per-session tracing span so the debug-log firehose
/// routes its events to the session's file.
pub async fn with_session_ctx<F: std::future::Future>(session_id: &str, fut: F) -> F::Output {
use tracing::Instrument;
fut.instrument(session_span(session_id)).await
}
#[cfg(test)]
mod tests {
use super::*;
/// Without this pin, a diverging field name silently degrades routing to the
/// per-pid fallback instead of failing.
#[test]
fn session_span_exposes_router_field() {
// A bare registry enables every callsite, so the span has live metadata.
let subscriber = tracing_subscriber::registry();
tracing::subscriber::with_default(subscriber, || {
let span = session_span("test-id");
let meta = span
.metadata()
.expect("session span must have metadata under an enabling subscriber");
assert!(
meta.fields().field(SESSION_ID_FIELD).is_some(),
"session span must expose `{SESSION_ID_FIELD}` for debug-log routing",
);
});
}
}