pypi / monocle-apptrace
monocle-apptrace
What changed in monocle-apptrace 0.8, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-19.
4 breaking1 security21 new APIs and options4 behavior and defaults1 tooling10 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initmonocle-apptrace 0.841 changes
Breaking changes 4
MS Agent Framework agents hosted on Azure AI Foundry now produce complete traces, identify Foundry as their host, and have spans retrievable from Okahu.
setup_test_casesrefuses discovery windows larger than this limit instead of silently truncating them; the value comes from the argument, thenOKAHU_MAX_FACTS, then defaults to 1000.Turn spans now record prompt text using the renamed
contentsfield instead of an object representation; the fallback also avoids exporting object reprs.AWS Bedrock AgentCore trace return now authorizes callers before returning spans; deployments must configure this key or a retrieval callback, and invocations must present the matching retrieval key.
Security 1
Sensitive data in
data.inputanddata.outputis scrubbed before spans reach exporters; obfuscation is on by default and covers common credentials and secrets.
New APIs and options 21
Accepts a
testcasefor parametrized tests.Accepts a
testcasefor parametrized tests.Accepts a
testcase; every eval a case names is graded and all failures are reported together.Borrows the expected result from a different eval.
Adds a runner for invoking an agent deployed to Azure AI Foundry and retrieving its spans from Okahu; it authenticates with an Entra bearer token and correlates spans using Foundry's trace id.
Input and output assertions accept a
testcasefor parametrized tests.The root path
/can now be opted into as a health check route and matches the root exactly; it is not a default.Remote trace retrieval now waits up to this many seconds for spans to reach the backend; the default is 60 seconds instead of a hard-coded 10.
Sets the Okahu API timeout, which defaults to 120 seconds; precedence is explicit argument, environment variable, then default, and unusable values are logged and ignored.
Recorded populations can become parametrizable test cases for eval tuning and A/B testing; parametrized cases are named after the case rather than
[testcase0].Accepts a
testcasefor parametrized tests.Accepts a
testcasefor parametrized tests.Builds one
FluentTestCaseper recorded Okahu fact, or loads a committed JSON array withsource="local"for network-free golden datasets.Provides the workflow name needed to retrieve Foundry runner spans; alternatively, use
FOUNDRY_TRACE_WORKFLOW.Accepts a
testcasefor parametrized tests; trace sources also accept astart_time/end_timewindow.Setting this environment variable to
truedisables span obfuscation.Use this environment variable to scope span obfuscation to selected span types.
Configure span obfuscators, including adding PII detection with
credentials,presidioor disabling obfuscation withnone.Pass an empty
span_obfuscatorslist to disable span obfuscation.Implement a custom
SpanObfuscatorand configure it by itsmodule:ClassNamepath.Health-check routes can be replaced via this variable; matching response-body checks are sampled down to one span per reset counter, while requests with params or a body and failing checks are exported.
Behavior and default changes 4
A fact whose spans fail to load is emitted as a failing test under its own id, with the reason available in
load_error.The LiteLLM metamodel now recognizes ReAct-style text tool calls and extracts their tool name.
The LiteLLM metamodel now recognizes ReAct-style text tool calls and extracts their tool type.
eval_nameaccepts a built-in eval template name or a custom template JSON file path, so callers need not switch totemplate_pathfor custom templates.
Tooling 1
The test generator discovers evals configured for an agent and adds matching check_eval assertions, supporting custom templates and searching eval traces beyond 90 days.
Fixes and other changes 10
Streaming inference now emits a span when the consumer stops reading early; closing after full consumption cannot emit a duplicate span.
A path-like string eval name is now classified as a custom template, matching
check_eval, rather than being requested as a built-in template.The runner passes
memory=only to callables that accept it and binds it withfunctools.partialforrun_in_executor, which takes no kwargs.An unset API key is no longer stripped unguarded.
An endpoint environment variable that is set but empty now falls back to the default endpoint instead of producing a scheme-less URL.
Okahu enumerators now walk every page, and page size is bounds-checked locally instead of producing an opaque HTTP 400.
Wrappers no longer stop the scope token twice, preventing a cleanup error from masking the test's original exception.
Expected-failure marks now apply correctly to fluent assertions, avoiding hard failures for intentional failures and passes when a test silently stops failing.
Resetting span processors now re-appends the trace-return processor, so trace return is not silently dropped on an initialized instrumentor.
Span obfuscation preserves sentence punctuation after an unquoted credential value while still treating dots inside the value as part of the secret.