Evaluate BitRouter Routes
Evaluate outcomes outside BitRouter's serving path. Produce an immutable result
and stop after BitRouter reports its admission status. Do not run the optimizer
or use low-level policy publication from the evaluator workflow.
Read the Eval Exchange reference before forming
a subject or result. It is the exact current wire and authority contract.
Classify the evaluation
Choose scope from the observable outcome boundary:
| Evidence boundary |
Scope |
| One request-local outcome |
request |
| Bounded multi-request workflow or conversation |
episode |
| Externally defined task identity plus terminal task or verifier outcome |
task |
Choose evaluator.kind from the actual source:
| Evaluation source |
Kind |
| Task-native verifier |
task_native |
| Human reviewer |
human |
| Private enterprise evaluator |
enterprise |
| Agentic judge |
agentic |
| Genuinely uncategorized evaluator |
generic |
Build the evaluator packet
Copy every decision's decision_id, policy, route_projection,
request_key, selected_tier, baseline_tier, policy_digest, and
optional experiment object from router-authored evidence. Preserve the
experiment object verbatim; never invent or edit its id, arm, assignment
unit, assignment-id digest, or challenger propensity.
Redact evidence before it leaves its private source. Retain raw messages,
tool arguments, code, and evaluator output with the evaluator; place safe,
content-addressed evidence items in the subject.
List only dimensions the evaluator was asked to judge. Leave unsupported
dimensions absent. Use inconclusive when evidence cannot support a
verdict.
Set confidence_ppm to the evaluator's confidence that its verdict is
correct. Use null when the evaluator or rubric does not supply confidence.
For a task or episode cost result, submit the complete unit cost as
cost.usd_micros with unit micro_usd; never substitute one request's
price for the complete task or episode.
Write a draft subject with an empty evidence_digest, then seal it:
bro eval subject seal subject-draft.json --output subject.json
For a multi-decision subject, derive decision_credit from the fixed
evaluator credit policy:
- Exact supported decision/metric mappings: emit only those mappings.
- No policy or no exact mapping: use
{} or omit the serde-defaulted field.
The result remains a record but produces no per-route evidence.
For a one-decision subject, empty credit means implicit full credit. When an
inconclusive evaluator intentionally withholds attribution, emit that
decision with weight_ppm: 0 instead.
Keep hypothetical or illustrative weights outside submit-ready JSON.
Submit and hand off
Insert the sealed subject and submit a result that repeats its exact
eval_id and evidence_digest.
bro eval subject put subject.json --config bitrouter.yaml
bro eval result submit result.json --config bitrouter.yaml
Treat an admitted response as eligible evidence. Preserve held_out,
rejected, and disputed responses as non-training records.
Hand off the sealed subject, result, submission response, and private
evidence references, then stop. A later bro optimize run invocation
is a separate autonomous authorization; do not review, publish, or run it as
part of evaluation.
Keep the packet consistent
- Use
subject seal for canonical evidence hashing and JSON.
- Attribute metrics only to evidence-supported decisions.
- Never copy a task- or episode-level reward onto each request. Use a fixed
causal policy (for example, a matched control plus one changed route family)
or withhold credit.
- Preserve the router-authored baseline and selected tiers.
- Preserve router-authored experiment references exactly.
Optimizer membership never comes from the evaluator-owned
cohort string.
- Treat
inconclusive as zero quality evidence even if an old or malformed
packet assigns positive quality credit. Attribute cost or latency separately.
- Keep evaluator identity, rubric/config digest, evidence references,
confidence, and idempotency key stable for an equivalent retry.
- Keep
eval_id, result, and evidence identities attempt-specific. For task
scope, keep subject_id stable for the canonical task inside its explicit
run/source/policy namespace so repeated attempts cannot inflate the generic
compiler's independent-task count.
1---2name: evaluating-bitrouter-routes3description: Use when evaluating BitRouter route decisions or Eval Exchange subjects with task-native verifiers, human reviewers, private enterprise evaluators, agentic judges, or genuinely uncategorized evaluator sources.4---56# Evaluate BitRouter Routes78Evaluate outcomes outside BitRouter's serving path. Produce an immutable result9and stop after BitRouter reports its admission status. Do not run the optimizer10or use low-level policy publication from the evaluator workflow.1112Read [the Eval Exchange reference](references/eval-exchange.md) before forming13a subject or result. It is the exact current wire and authority contract.1415## Classify the evaluation1617Choose scope from the observable outcome boundary:1819| Evidence boundary | Scope |20|---|---|21| One request-local outcome | `request` |22| Bounded multi-request workflow or conversation | `episode` |23| Externally defined task identity plus terminal task or verifier outcome | `task` |2425Choose `evaluator.kind` from the actual source:2627| Evaluation source | Kind |28|---|---|29| Task-native verifier | `task_native` |30| Human reviewer | `human` |31| Private enterprise evaluator | `enterprise` |32| Agentic judge | `agentic` |33| Genuinely uncategorized evaluator | `generic` |3435## Build the evaluator packet36371. Copy every decision's `decision_id`, `policy`, `route_projection`,38 `request_key`, `selected_tier`, `baseline_tier`, `policy_digest`, and39 optional `experiment` object from router-authored evidence. Preserve the40 experiment object verbatim; never invent or edit its id, arm, assignment41 unit, assignment-id digest, or challenger propensity.422. Redact evidence before it leaves its private source. Retain raw messages,43 tool arguments, code, and evaluator output with the evaluator; place safe,44 content-addressed evidence items in the subject.453. List only dimensions the evaluator was asked to judge. Leave unsupported46 dimensions absent. Use `inconclusive` when evidence cannot support a47 verdict.484. Set `confidence_ppm` to the evaluator's confidence that its verdict is49 correct. Use `null` when the evaluator or rubric does not supply confidence.50 For a task or episode cost result, submit the complete unit cost as51 `cost.usd_micros` with unit `micro_usd`; never substitute one request's52 price for the complete task or episode.535. Write a draft subject with an empty `evidence_digest`, then seal it:5455 ```bash56 bro eval subject seal subject-draft.json --output subject.json57 ```58596. For a multi-decision subject, derive `decision_credit` from the fixed60 evaluator credit policy:61 - Exact supported decision/metric mappings: emit only those mappings.62 - No policy or no exact mapping: use `{}` or omit the serde-defaulted field.63 The result remains a record but produces no per-route evidence.64 For a one-decision subject, empty credit means implicit full credit. When an65 inconclusive evaluator intentionally withholds attribution, emit that66 decision with `weight_ppm: 0` instead.67 Keep hypothetical or illustrative weights outside submit-ready JSON.6869## Submit and hand off70711. Insert the sealed subject and submit a result that repeats its exact72 `eval_id` and `evidence_digest`.7374 ```bash75 bro eval subject put subject.json --config bitrouter.yaml76 bro eval result submit result.json --config bitrouter.yaml77 ```78792. Treat an `admitted` response as eligible evidence. Preserve `held_out`,80 `rejected`, and `disputed` responses as non-training records.813. Hand off the sealed subject, result, submission response, and private82 evidence references, then stop. A later `bro optimize run` invocation83 is a separate autonomous authorization; do not review, publish, or run it as84 part of evaluation.8586## Keep the packet consistent8788- Use `subject seal` for canonical evidence hashing and JSON.89- Attribute metrics only to evidence-supported decisions.90- Never copy a task- or episode-level reward onto each request. Use a fixed91 causal policy (for example, a matched control plus one changed route family)92 or withhold credit.93- Preserve the router-authored baseline and selected tiers.94- Preserve router-authored experiment references exactly.95 Optimizer membership never comes from the evaluator-owned `cohort` string.96- Treat `inconclusive` as zero quality evidence even if an old or malformed97 packet assigns positive quality credit. Attribute cost or latency separately.98- Keep evaluator identity, rubric/config digest, evidence references,99 confidence, and idempotency key stable for an equivalent retry.100- Keep `eval_id`, result, and evidence identities attempt-specific. For task101 scope, keep `subject_id` stable for the canonical task inside its explicit102 run/source/policy namespace so repeated attempts cannot inflate the generic103 compiler's independent-task count.