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).
48 lines
1.9 KiB
Rust
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",
|
|
);
|
|
});
|
|
}
|
|
}
|