Skip to main content
This walkthrough shows the Result lifecycle on a concrete objective: improving a Banking77 intent-classification prompt. The optimized prompt is a Result. Evaluation and current-best selection are optional metadata on that Result — you never rewrite or replace the Result to record them. Banking77 is the example; the same Result surface works for any Factory output: report, prompt, policy, dataset, model, artifact, or draft code change.

1. Install and authenticate

2. Read the Results a Factory produced

Every directly valuable output a Factory produces is a Result. List them from the Result surface; ordinary Results carry no evaluation and no selection.
Filter the listing by Effort, run, kind, readiness, evaluation status, or current-best state — for example, research.factories.results.list(factory_id, kind="prompt", current_best=True).

3. Attach a benchmark-owned evaluation

When a benchmark grades an optimized prompt, attach the grader’s record to the Result. The backend never grades; it stores exactly what the grader proved. The Result’s identity and content do not change.
Only a Result backed by a registered candidate accepts an evaluation. An evaluation posted for the wrong Result identity is rejected.

4. Select the current best

Mark a passing Result as the current best for a named objective/scope. This is idempotent and historical: it appends a selection event and never deletes or rewrites the earlier Result.
Selecting another passing Result later changes the current-best state without deleting or rewriting this Result. research.factories.results.restore_current_best(...) re-selects a prior Result as current best.

5. Confirm the Result is conserved

The Result you graded and selected is the same Result throughout — selection is state layered on top of it, not a new object.

MCP equivalent

The same lifecycle is available to an MCP client through smr_list_factory_results, smr_get_factory_result, smr_evaluate_factory_result, smr_select_factory_result_current_best, smr_restore_factory_result_current_best, and smr_list_factory_result_selection_events.

Legacy compatibility

The research.factories.candidates and research.factories.champions namespaces (and their smr_*_candidate / smr_*_champion MCP tools) remain available over the same backend authority for existing integrations. New code should use Results; candidate/champion are legacy optimization terminology.