* signals: restore the pre-port flag marker emoji
#903 inadvertently replaced the legacy FLAG_MARKER (U+1F6A9, '🚩') with
'[!]', which broke any downstream dashboard / alert that searches span
names for the flag emoji. Restores the original marker and updates the
#910 docs pass to match.
- crates/brightstaff/src/signals/analyzer.rs: FLAG_MARKER back to
"\\u{1F6A9}" with a comment noting the backwards-compatibility
reason so it doesn't drift again.
- docs/source/concepts/signals.rst and docs/source/guides/observability/
tracing.rst: swap every '[!]' reference (subheading text, example
span name, tip box, dashboard query hint) back to 🚩.
Verified: cargo test -p brightstaff --lib (162 passed, 1 ignored);
sphinx-build clean on both files; rendered HTML shows 🚩 in all
flag-marker references.
Made-with: Cursor
* fix: silence manual_checked_ops clippy lint (rustc 1.95)
Pre-existing warning in router/stress_tests.rs that becomes an error
under CI's -D warnings with rustc 1.95. Replace the manual if/else
with growth.checked_div(num_iterations).unwrap_or(0) as clippy
suggests.
Made-with: Cursor
* docs: align signals page with paper taxonomy
Updates docs/source/concepts/signals.rst and the tracing guide's signals
subsection to reflect the three-layer taxonomy shipped in #903:
- Introduces the paper reference (arXiv:2604.00356) and the three layers
(interaction, execution, environment) with all 20 leaf signal types in
three reference tables
- Documents the new layered OTel attribute set
(signals.interaction.*, signals.execution.*, signals.environment.*)
and marks the legacy aggregate keys (signals.follow_up.repair.*,
signals.frustration.*, signals.repetition.count,
signals.escalation.requested, signals.positive_feedback.count) as
deprecated-but-still-emitted
- Adds a Span Events section describing the per-instance signal.<type>
events with confidence / snippet / metadata attributes
- Fixes the flag marker reference ([!] in the code vs 🚩 in the old docs)
- Updates all example attributes, dashboard queries, and alert rules to
use the layered keys
- Updates the tracing guide's behavioral-signals subsection to match
- Notes that the triage sampler is a planned follow-up and today sampling
is consumer-side via observability-platform filters
Build verified locally: sphinx-build produces no warnings on these files.
Made-with: Cursor
* docs: reframe signals intro around the improvement flywheel
Addresses review feedback on #910:
- Replace the triage-only framing at the top with an instrument -> sample
& triage -> construct data -> optimize -> deploy flywheel that explains
why signals matter, not just what they surface. Paper's 82% / 1.52x
numbers move into step 2 of the flywheel where they belong.
- Remove the 'Signals vs Response Quality' section. Per review, signals
and response quality overlap rather than complement each other, so the
comparison is misleading.
- Borrow the per-category summaries and leaf-type descriptions verbatim
from the katanemo/signals reference implementation (module docstrings)
so the documentation and the detector contract stay in sync. Drops the
hand-crafted examples that were not strictly accurate (e.g. 'semantic
overlap is high' for rephrase, 'user explicitly corrects the agent'
for correction).
Made-with: Cursor
* docs: address signals flywheel review feedback
Addresses review comments on #910:
- Shorten the paper citation to (Chen et al., 2026) per common cite
practice (replacing the full author list form).
- Replace the Why Signals Matter section with the review-suggested
rewrite verbatim: more formal intro framing, renumbered steps to
Instrument / Sample & triage / Data Construction / Model Optimization
/ Deploy, removes 'routing decisions' from the data-construction
step, and adds DPO/RLHF/SFT as model-optimization examples.
- Renders tau and O(messages) as proper math glyphs via the sphinx
built-in :math: role (enabled by adding sphinx.ext.mathjax to
conf.py). Using the RST role form rather than raw $...$ inline so
sphinx only injects MathJax on pages that actually have math,
instead of loading ~1MB of JS on every page.
Build verified locally: sphinx-build produces no warnings on the
changed files and the rendered HTML wraps tau and O(messages) in
MathJax-ready <span class="math">\(\tau\)</span> containers.
Made-with: Cursor
* adding support for signals
* reducing false positives for signals like positive interaction
* adding docs. Still need to fix the messages list, but waiting on PR #621
* Improve frustration detection: normalize contractions and refine punctuation
* Further refine test cases with longer messages
* minor doc changes
* fixing echo statement for build
* fixing the messages construction and using the trait for signals
* update signals docs
* fixed some minor doc changes
* added more tests and fixed docuemtnation. PR 100% ready
* made fixes based on PR comments
* Optimize latency
1. replace sliding window approach with trigram containment check
2. add code to pre-compute ngrams for patterns
* removed some debug statements to make tests easier to read
* PR comments to make ObservableStreamProcessor accept optonal Vec<Messagges>
* fixed PR comments
---------
Co-authored-by: Salman Paracha <salmanparacha@MacBook-Pro-342.local>
Co-authored-by: MeiyuZhong <mariazhong9612@gmail.com>
Co-authored-by: nehcgs <54548843+nehcgs@users.noreply.github.com>