Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
274 commits
Select commit Hold shift + click to select a range
19724b9
[kbn-evals] Isolate per-example task/evaluator failures so one bad ru…
patrykkopycinski Aug 21, 2026
0bb1334
[orca-vm] Overlay kbn-evals executor failure-isolation patch onto swe…
patrykkopycinski Aug 21, 2026
598477e
[kbn-evals] Reword error-result comment (deslop tell)
patrykkopycinski Aug 21, 2026
44da8ef
[ops] Rename scripts/orca-vm to scripts/orca_vm (file_casing quick ch…
patrykkopycinski Aug 21, 2026
9ef753b
Merge upstream/main: evaluator version field (elastic#286158) coexist…
patrykkopycinski Aug 21, 2026
3be48ee
Merge remote-tracking branch 'upstream/main' into feat/evals-extensio…
patrykkopycinski Aug 21, 2026
92aa1b4
fix(persona-matrix): require final user-facing answer after detection…
patrykkopycinski Aug 21, 2026
ec39ae7
feat(matrix): per-example scores, rep badges, provenance fingerprint,…
patrykkopycinski Aug 21, 2026
514ed56
fix(orca_vm): scope sweep golden gate to the model's latest execution
patrykkopycinski Aug 21, 2026
a814522
feat(evals): execution/model filters on the example-scores route; mat…
patrykkopycinski Aug 21, 2026
f85527e
[evals][persona-matrix] Unbreak failing columns + add cost/steps axes
patrykkopycinski Aug 22, 2026
f792224
[evals][matrix] Elevate legacy-fallback detection to warning so ignor…
patrykkopycinski Aug 22, 2026
5b823ac
[evals][matrix] Parallelize trace fetches: pool phase-1 enumeration (…
patrykkopycinski Aug 22, 2026
a53d321
[evals][matrix] Retry transient example-fetch failures once — concurr…
patrykkopycinski Aug 22, 2026
e81da1d
[evals][matrix] Trace-integrity follow-ups: verify pass-through cover…
patrykkopycinski Aug 22, 2026
fa2692e
[kbn-evals-extensions] Add --trace-cache option to matrix CLI
patrykkopycinski Aug 22, 2026
1591917
[kbn-evals-extensions] Matrix coverage display + trace-map dedup
patrykkopycinski Aug 22, 2026
44a749b
[persona-matrix-sweep] Repoint env-seed overlays to the matrix branch
patrykkopycinski Aug 22, 2026
61c2b45
[sweep] Ship tool_registration_check overlay + false-green gate fix
patrykkopycinski Aug 22, 2026
6a914e9
[Security Persona Matrix] Use date-formatted API version in tool-regi…
patrykkopycinski Aug 22, 2026
0dfd35d
[sweep] Drop stale 252-doc expectation in export_scores.py
patrykkopycinski Aug 22, 2026
16c43f6
[Security Persona Matrix] Prettier: single-line import in tool-regist…
patrykkopycinski Aug 22, 2026
81b412b
[sweep] Propagate eval rc from run_model.sh; per-model timeout env (g…
patrykkopycinski Aug 22, 2026
0f330ee
[Security Persona Matrix] Attach seeded tools to the agent so tool-se…
patrykkopycinski Aug 22, 2026
90b867c
[sweep] Retry deploy once; skip a dead VM instead of aborting the sweep
patrykkopycinski Aug 22, 2026
90400f4
[sweep] Fix golden-gate curl quoting (remote shell is the only layer)
patrykkopycinski Aug 22, 2026
d3d87bd
[evals][persona-matrix] Seed Entity Store V2 + fix availability-impos…
patrykkopycinski Aug 23, 2026
a1e2afe
Changes from node scripts/lint_ts_projects --fix
kibanamachine Aug 23, 2026
86e074f
[evals][persona-matrix] Entity Store V2 install wait: 600s deadline +…
patrykkopycinski Aug 23, 2026
aeb8b6f
[evals][persona-matrix] Entity Store V2 install: fire-and-poll
patrykkopycinski Aug 23, 2026
ddb5d57
[evals][persona-matrix] Fix kbnClient response-shape bug in entity se…
patrykkopycinski Aug 23, 2026
7236bc8
[evals][persona-matrix] Multi-model gate fixes: exempt conversation-s…
patrykkopycinski Aug 23, 2026
cefdb9f
[evals] Isolate getEvaluationsKbnClient tests from ambient EVAL_KBN_URL
patrykkopycinski Aug 23, 2026
744a75a
[evals] Surface per-cell repetition spread and add cross-sweep stabil…
patrykkopycinski Aug 23, 2026
d715ae3
[evals] Reject whitespace in matrix report link targets
patrykkopycinski Aug 23, 2026
df81cbc
[evals] Add judge provenance gate and cross-family jury scoring
patrykkopycinski Aug 23, 2026
16d4b10
[evals] Wire verdict ladder and judge provenance into score aggregation
patrykkopycinski Aug 23, 2026
9d62fa3
[evals] Add --require-eis-judge to reject unpinned evaluation connectors
patrykkopycinski Aug 23, 2026
6afad20
[evals] Thread judged-scoring policy from matrix config to aggregation
patrykkopycinski Aug 23, 2026
301a598
[evals] Cover the config-to-aggregation scoring link with biting tests
patrykkopycinski Aug 23, 2026
18a51a9
[evals] Enable verdict-ladder scoring for the persona matrix
patrykkopycinski Aug 24, 2026
cda0523
Changes from node scripts/regenerate_moon_projects.js --update
kibanamachine Aug 24, 2026
85e1751
Merge upstream/main into feat/evals-extensions-matrix-v3
patrykkopycinski Aug 25, 2026
a645be2
[kbn-evals] Declare require-eis-judge in shared evalRunFlags
patrykkopycinski Aug 25, 2026
b4bf463
fix(kbn-evals): align local config with the running Scout stack
patrykkopycinski Aug 25, 2026
37b008b
Merge branch 'main' of https://github.com/elastic/kibana into ao-pr-e…
patrykkopycinski Aug 25, 2026
294b7cd
Merge branch 'main' of https://github.com/elastic/kibana into ao-pr-e…
patrykkopycinski Aug 26, 2026
0d067e4
Merge branch 'main' of https://github.com/elastic/kibana into ao-pr-e…
patrykkopycinski Aug 27, 2026
e25b7aa
feat(persona-matrix): add attack discovery and automatic migrations c…
patrykkopycinski Aug 28, 2026
d4b1b88
fix(evals): route score export to the selected export profile
patrykkopycinski Aug 28, 2026
f9250e5
Merge branch 'main' of https://github.com/elastic/kibana into ao-pr-e…
patrykkopycinski Aug 28, 2026
b604846
[Security GenAI] Fix panel-count false zero and per-column matrix bra…
patrykkopycinski Aug 28, 2026
b830935
[Security GenAI] Add Sonnet 5, GPT-5.5 and GLM-5.2 to the persona matrix
patrykkopycinski Aug 29, 2026
fb45d4c
[Security GenAI] Gate persona-matrix sweeps against unpublishable scores
patrykkopycinski Aug 29, 2026
7eddcd9
[Security GenAI] Render judge-rejected cells distinctly from empty ones
patrykkopycinski Aug 29, 2026
c776ee9
[Security GenAI] Share model-id resolution between sweep gates
patrykkopycinski Aug 29, 2026
26a3dae
[Security GenAI] Gate matrix publication on coverage and trace comple…
patrykkopycinski Aug 29, 2026
1a3d65e
[Security GenAI] Add ES trace-cache builder and Tool Calls integrity …
patrykkopycinski Aug 29, 2026
069a1c7
[Security GenAI] Point the unmapped-verdict warning at the real cause
patrykkopycinski Aug 29, 2026
ba330ae
[Security GenAI] Trim cached trace steps to what the renderer reads
patrykkopycinski Aug 29, 2026
23e3c47
[Security GenAI] Keep trimmed tool args as objects, not strings
patrykkopycinski Aug 29, 2026
4fea610
[Security GenAI] Add a self-test to the trace-cache builder
patrykkopycinski Aug 29, 2026
d2622f9
[Security GenAI] Make the persona sweep report failur...[truncated]
patrykkopycinski Aug 29, 2026
4b80ac2
[Security GenAI] Announce self-judged score exclusions
patrykkopycinski Aug 29, 2026
84b262f
[Security GenAI] Skip self-judged experiments when picking the latest…
patrykkopycinski Aug 29, 2026
24fa717
[Security GenAI] Resolve the sweep gate from golden when the VM index…
patrykkopycinski Aug 29, 2026
513da7c
[Security GenAI] Warn when trace panels come back without steps
patrykkopycinski Aug 29, 2026
16453db
[Security GenAI] Match either id spelling when resolving scores
patrykkopycinski Aug 29, 2026
d1d58e3
[Security GenAI] Restore the eval exit code the sweep relies on
patrykkopycinski Aug 29, 2026
57663a7
[Security GenAI] Drop a truncation artifact from the matrix CLI help
patrykkopycinski Aug 29, 2026
cab20a6
[Security GenAI] Give sweep runs a retry budget
patrykkopycinski Aug 29, 2026
6ba2c61
[Security GenAI] Say when a score comes from an incomplete run
patrykkopycinski Aug 29, 2026
e9c1273
[Security GenAI] Point the attack-discovery column at real evaluator …
patrykkopycinski Aug 29, 2026
b5939db
[Security GenAI] Retry the transport failures that end long eval runs
patrykkopycinski Aug 29, 2026
92154bc
[Security GenAI] Stop scoring a missing tool span as zero tool calls
patrykkopycinski Aug 29, 2026
2c5de27
[Security GenAI] Record matrix provenance and flag config that matche…
patrykkopycinski Aug 29, 2026
f448bd5
[Security GenAI] Ship the transport-retry fix to the sweep VMs
patrykkopycinski Aug 29, 2026
7de6789
[Security GenAI] Bound each eval request so a hung endpoint cannot st…
patrykkopycinski Aug 29, 2026
04ea89a
[Security GenAI] Ship the dataset to the sweep VMs
patrykkopycinski Aug 30, 2026
88662d7
[Security GenAI] Size the GLM budgets to measured latency
patrykkopycinski Aug 30, 2026
e86c04d
[Security GenAI] Trust evaluator.direction over the name allowlist
patrykkopycinski Aug 30, 2026
0e284c4
[Security GenAI] Group statistically tied models into tiers
patrykkopycinski Aug 31, 2026
82bc1a8
Merge upstream/main into feat/evals-extensions-matrix-v3
patrykkopycinski Aug 31, 2026
6480035
[Security GenAI] Point Kill-Chain at the live attack-discovery suite
patrykkopycinski Aug 31, 2026
2f1b2d1
[Security GenAI] Scope example prefixes to the columns that declare them
patrykkopycinski Aug 31, 2026
361ebcc
[Security GenAI] Run security-automatic-migrations in the weekly eval…
patrykkopycinski Aug 31, 2026
859d972
Merge remote-tracking branch 'upstream/main' into feat/evals-extensio…
patrykkopycinski Sep 1, 2026
74babf7
[Security GenAI] Separate matrix capability and reliability
patrykkopycinski Sep 1, 2026
37fbd0b
[Security GenAI] Populate matrix reliability from repeated runs
patrykkopycinski Sep 1, 2026
918f28b
[Security GenAI] Report reliability with intervals, not point estimates
patrykkopycinski Sep 1, 2026
950c272
[Security GenAI] Separate tool-set churn from ordering churn on the r…
patrykkopycinski Sep 1, 2026
886eaf8
[Security GenAI] Recover ranking signal: drop saturated evaluators, r…
patrykkopycinski Sep 1, 2026
6ad1e55
[Security GenAI] Serialize the saturation verdict into matrix.json
patrykkopycinski Sep 1, 2026
b3050bd
[Security GenAI] Calibrate runStdev against the evaluator set Overall…
patrykkopycinski Sep 1, 2026
da4df8d
[Security GenAI] Disclose the saturated-evaluator exclusion on the ma…
patrykkopycinski Sep 1, 2026
0e2de1f
[Security GenAI] Keep ladder scores when the server strips evaluator.…
patrykkopycinski Sep 1, 2026
9131690
[Security GenAI] Warn when the matrix loses every scored cell
patrykkopycinski Sep 1, 2026
b38adc1
[Security GenAI] Recover matrix cells hidden by config, stamp per-row…
patrykkopycinski Sep 2, 2026
bd540b2
[Security GenAI] Pin extra-suite columns to the branch their runs liv…
patrykkopycinski Sep 2, 2026
2e91118
[Security GenAI] Add judge-agreement axis and retry EIS-wrapped 500s
patrykkopycinski Sep 2, 2026
05c0d0a
[Security GenAI] Let an audited column keep its self-judged row
patrykkopycinski Sep 2, 2026
1bdd3f5
[Security GenAI] Prove the 500 retry fires, and stop discarding parti…
patrykkopycinski Sep 2, 2026
66d9e92
[Security GenAI] Disclose self-judged scores per row
patrykkopycinski Sep 2, 2026
7996b91
[Security GenAI] Close the 4.8-opus single-judge hole, disclose parti…
patrykkopycinski Sep 2, 2026
33d2ebe
[Security GenAI] Warn before a pinned column ages out of the lookback
patrykkopycinski Sep 2, 2026
b0ccc02
[Security GenAI] Union a suite's branches so no branch-local model is…
patrykkopycinski Sep 2, 2026
1df72d2
[Security GenAI] Distinguish a withheld self-judged cell from a never…
patrykkopycinski Sep 2, 2026
39cdce9
[Security GenAI] Parameterize the VM sweeper by eval suite
patrykkopycinski Sep 2, 2026
8ede7bf
[Security GenAI] Export scores by suite, not a hardcoded dataset id
patrykkopycinski Sep 2, 2026
4bb6954
[Security GenAI] Fix sweep gate reading the wrong execution
patrykkopycinski Sep 2, 2026
79c7136
[Security GenAI] Retry the eval step through the CCM boot race
patrykkopycinski Sep 2, 2026
cb21756
[Security GenAI] Admit main-branch runs into pinned matrix columns
patrykkopycinski Sep 2, 2026
cfc3353
[Security GenAI] Pin the branch-union contract in the config tests
patrykkopycinski Sep 2, 2026
a006269
[Security GenAI] Merge trace caches so one new model needs one narrow…
patrykkopycinski Sep 2, 2026
c26de42
[Security GenAI] Stop republishing a rejected result as the retry fal…
patrykkopycinski Sep 2, 2026
c8d72e0
[Security GenAI] Corroborate runaway-loop warnings against the tool t…
patrykkopycinski Sep 2, 2026
862dcee
[Security GenAI] Bound eval HTTP attempts by default so a dead endpoi…
patrykkopycinski Sep 2, 2026
b8d194b
[Security Evals] Shard persona-matrix examples across VMs
patrykkopycinski Sep 3, 2026
334b22a
[Security Evals] Add --shards fanout to persona-matrix sweep
patrykkopycinski Sep 3, 2026
8097e8d
[Security Evals] Ship select_shard.ts in the VM overlay
patrykkopycinski Sep 3, 2026
4f3c3ea
[Security Evals] Resolve golden env durably + preflight local assets
patrykkopycinski Sep 3, 2026
1c30e3e
[Security Evals] Give each shard its own TEST_RUN_ID
patrykkopycinski Sep 3, 2026
f8e0b9c
[Security Evals] Pin the shard gate to its own execution id
patrykkopycinski Sep 3, 2026
bb16cd3
[Security Evals] Build the shard execution id instead of matching a p…
patrykkopycinski Sep 3, 2026
318e38c
[Security Evals] Merge sharded score docs into one matrix row
patrykkopycinski Sep 3, 2026
4720840
[Security Evals] Carry all shard execution ids through the suite row
patrykkopycinski Sep 3, 2026
f5f7eb3
[Security Evals] Fan trace enumeration out over all shard executions
patrykkopycinski Sep 3, 2026
b0f1367
[Security Evals] Add OpenRouter provider path to VM persona-matrix sweep
patrykkopycinski Sep 3, 2026
2a2627f
Fix OpenRouter endpoint lifecycle on VM sweeps
patrykkopycinski Sep 3, 2026
876f24c
Give slow OSS models a shard timeout that fits their pace
patrykkopycinski Sep 3, 2026
76f17ab
Retry persona-matrix env seeding on transient ES boot failures
patrykkopycinski Sep 3, 2026
1f4d2e2
Extend trace-evaluator retry budget past OTel flush lag
patrykkopycinski Sep 3, 2026
d18686c
Densify threat-hunting-c endpoint fixture with a relative-time baseline
patrykkopycinski Sep 3, 2026
26eafc5
Ship trace-evaluator retry fix in the sweep overlay
patrykkopycinski Sep 3, 2026
e9b78c2
Accept feat/evals-extensions-matrix-v3 branch in Kill-Chain column
patrykkopycinski Sep 3, 2026
876c5ff
Ship golden trace-export wiring in the sweep overlay
patrykkopycinski Sep 3, 2026
e776214
Capture final-answer fallback and label code-evaluated suites in matr…
patrykkopycinski Sep 4, 2026
13ad293
Wire agentBuilderTracingExporters through profiles and scout evals_tr…
patrykkopycinski Sep 4, 2026
77ca9f7
Source eval_stack overlay from this worktree so the golden trace expo…
patrykkopycinski Sep 4, 2026
378fcb2
Add --only-shard single-shard backfill to the sweep CLI
patrykkopycinski Sep 4, 2026
d79f4c3
Ship chat_client in the sweep overlay and gate on withRetry/messageSo…
patrykkopycinski Sep 4, 2026
9ae1d92
Fix chat_client deploy gate: require >=1 marker, not exactly 1
patrykkopycinski Sep 4, 2026
7cec416
Resolve matrix trace cells for models with aliased provider ids
patrykkopycinski Sep 4, 2026
8243377
Fix trace-evaluator ES|QL index pattern + refuse cells built on error…
patrykkopycinski Sep 4, 2026
2067438
Make Scout readiness timeout overridable via SCOUT_READY_TIMEOUT_MS env
patrykkopycinski Sep 4, 2026
e148b32
run_model.sh: export TRACING_ES_* as ambient env for trace evaluators
patrykkopycinski Sep 4, 2026
afbddf1
Sweep provisioner: fall back to Regular priority when spot capacity i…
patrykkopycinski Sep 4, 2026
832624e
Correctness judge prompt: force analyze tool-call schema conformance …
patrykkopycinski Sep 5, 2026
622fbf0
Sweep: VM_NAME_SUFFIX isolates parallel same-model sweeps
patrykkopycinski Sep 5, 2026
c7e1dea
Sweep: include VM_NAME_SUFFIX in TEST_RUN_ID so parallel sweeps don't…
patrykkopycinski Sep 5, 2026
2260489
Sweep: quota gate, VM parking/warm pool, and VM-free judge replay
lorenabalan Aug 20, 2026
0e33f0e
FinalAnswerPresent: count a rendered rule artifact as an answer
patrykkopycinski Sep 6, 2026
f32a462
Matrix v2: tiers, specialisation, and an efficiency frontier
patrykkopycinski Sep 6, 2026
f95472e
Retry backoff: hold a 30s floor once cheap attempts are spent
patrykkopycinski Sep 6, 2026
02ad542
Route suite-local trace evaluators through the shared datastream inde…
patrykkopycinski Sep 6, 2026
fcf014b
Changes from node scripts/lint_ts_projects --fix
kibanamachine Sep 6, 2026
7da070a
Changes from node scripts/regenerate_moon_projects.js --update
kibanamachine Sep 6, 2026
e8e7881
Changes from node scripts/eslint_all_files --no-cache --fix
kibanamachine Sep 6, 2026
9abcd5c
Move eval plan notes out of the published Kibana docset
patrykkopycinski Sep 6, 2026
e76eba6
Eval stacks: capture tool call details so trace evaluators can read them
patrykkopycinski Sep 7, 2026
d990b3e
Matrix: add an as-of cutoff and gate cells on unavailable evaluators
patrykkopycinski Sep 7, 2026
96abf38
Matrix: disclose the as-of cutoff in rendered provenance
patrykkopycinski Sep 7, 2026
dcb5156
Matrix: add the production persona-matrix config
patrykkopycinski Sep 7, 2026
e394ca7
Changes from node scripts/eslint_all_files --no-cache --fix
kibanamachine Sep 7, 2026
70fc26f
Matrix: re-judge stored agent outputs without re-running models
patrykkopycinski Sep 7, 2026
c277685
Sweep resume: canonicalise execution_id and derive run id without TES…
patrykkopycinski Sep 7, 2026
d09fa64
Changes from node scripts/lint_ts_projects --fix
kibanamachine Sep 7, 2026
e276490
Changes from node scripts/regenerate_moon_projects.js --update
kibanamachine Sep 7, 2026
80f3256
Persona matrix: carry messageSource into the stored task output
patrykkopycinski Sep 7, 2026
577b493
Persona matrix sweep: gate deploys on the messageSource forward
patrykkopycinski Sep 7, 2026
53e934f
Scout evals_tracing test: drive the env the config actually reads
patrykkopycinski Sep 7, 2026
b4af93f
Rename plan docs to snake_case for the file casing check
patrykkopycinski Sep 7, 2026
7e0a5c2
Persona matrix sweep: overlay the trace evaluators so SkillInvoked ca…
patrykkopycinski Sep 7, 2026
55d6f31
Persona matrix sweep: overlay the @kbn/evals barrels, not just the mo…
patrykkopycinski Sep 7, 2026
5ecab7a
Persona matrix sweep: drop the .keyword suffix from the golden gate
patrykkopycinski Sep 7, 2026
91c9a8c
Persona matrix sweep: overlay the metric evaluators too
patrykkopycinski Sep 7, 2026
aec90b0
Persona matrix sweep: query golden from the driver, not the parked VM
patrykkopycinski Sep 7, 2026
137514d
Persona matrix sweep: gate on the connector id, not the display name
patrykkopycinski Sep 7, 2026
9291e4d
fix(evals-ext): carry tool-call history into judge replay
patrykkopycinski Sep 7, 2026
4e7f284
fix(evals-ext): scrub model identity from replayed tool-call history
patrykkopycinski Sep 7, 2026
4de5ffe
fix(scout): always capture tool details on eval stacks
patrykkopycinski Sep 7, 2026
14d7690
feat(evals-ext): per-suite reference adapters for rejudge
patrykkopycinski Sep 7, 2026
b98dc87
Merge remote-tracking branch 'upstream/main' into feat/evals-extensio…
patrykkopycinski Sep 7, 2026
7fe5808
fix(evals-detection-watch): use shared TRACE_INDEX_PATTERN
patrykkopycinski Sep 7, 2026
6d96ffa
fix(evals-ext): suite-aware rejudge juries + newest-execution selection
patrykkopycinski Sep 8, 2026
d913721
Changes from node scripts/lint_ts_projects --fix
kibanamachine Sep 8, 2026
1a72fd3
Changes from node scripts/regenerate_moon_projects.js --update
kibanamachine Sep 8, 2026
ebede75
fix(orca_vm): quota reuse accounting, CCM preflight, AD shard gate
patrykkopycinski Sep 8, 2026
e85d529
fix(evals-ext): join attack-discovery references by scenario key
patrykkopycinski Sep 8, 2026
db8bc12
fix(evals-ext): key structured ground truth like the prose references
patrykkopycinski Sep 8, 2026
cd962b0
fix(evals-ext): derive the matrix judge from data instead of assertin…
patrykkopycinski Sep 8, 2026
68fe0dd
feat(evals-ext): reproducible matrix config, golden merge writer, hon…
patrykkopycinski Sep 8, 2026
34248df
fix(evals-ext): assert on evaluator names, not exit status, after a r…
patrykkopycinski Sep 8, 2026
e862a60
fix(evals-ext): report why a rejudge graded nothing
patrykkopycinski Sep 8, 2026
61d2788
fix(evals-ext): declare internal origin on judge inference calls
patrykkopycinski Sep 8, 2026
3edc0f3
fix(evals-ext): let the judge stack choose its auth scheme
patrykkopycinski Sep 8, 2026
6679a58
feat(evals-ext): measure whether a matrix column ranks models or judges
patrykkopycinski Sep 8, 2026
2850a61
refactor(evals-ext): tighten judge-overlap internals
patrykkopycinski Sep 8, 2026
18e2070
feat(evals-ext): publish a 4-judge ensemble column
patrykkopycinski Sep 8, 2026
3c54182
fix(evals-ext): let a rejudge reach the agent-builder AD dataset
patrykkopycinski Sep 8, 2026
9c52ff2
fix(evals-ext): cover all nine AD slices and reject pre-encoded judge…
patrykkopycinski Sep 8, 2026
529f604
fix(evals-ext): select the newest experiment per column, not per suite
patrykkopycinski Sep 8, 2026
c1a0858
fix(evals-ext): report the causes an AggregateError hides
patrykkopycinski Sep 8, 2026
b407b3e
feat(evals-ext): distinguish rubric saturation from judge noise
patrykkopycinski Sep 8, 2026
8bb0925
fix(evals-ext): pair the ensemble bootstrap on example identity
patrykkopycinski Sep 8, 2026
8ccb13b
fix(evals-ext): report borderline pairs instead of a seed-dependent v…
patrykkopycinski Sep 8, 2026
f2477ed
fix(ad-evals): score the AD rubric per item instead of one pass/fail …
patrykkopycinski Sep 8, 2026
243f956
fix(evals-ext): stop the rejudge harness shadowing the suite's rubric
patrykkopycinski Sep 8, 2026
065b0f2
feat(evals-ext): fail a run when an evaluator cannot separate models
patrykkopycinski Sep 8, 2026
186de5b
fix(ad-evals): give every golden-path scenario a replay join key
patrykkopycinski Sep 8, 2026
98e1d8c
refactor(evals-ext): declare evaluator roles instead of inferring them
patrykkopycinski Sep 8, 2026
e6e3d3d
fix(evals-sweep): stop reporting transport failures as overlay failures
patrykkopycinski Sep 9, 2026
b96df19
fix(evals-ext): withdraw persona separability claim from the board
patrykkopycinski Sep 9, 2026
72ae4a0
feat(evals-ext): reproducible persona board, scoring policy, render f…
patrykkopycinski Sep 9, 2026
60c10de
fix(evals-ext): make trace caches actually land in the board
patrykkopycinski Sep 9, 2026
b1e1706
fix(evals-ext): recover final answers in matrix trace cards
patrykkopycinski Sep 9, 2026
6866f6a
refactor(evals-ext): fold the answer and score scans into one sibling…
patrykkopycinski Sep 9, 2026
43c76c8
test(scout): hold every evals_* config set to tool-detail capture
patrykkopycinski Sep 9, 2026
a72fdf9
fix(evals-ext): render skill names, blind sweep VM names from the judge
patrykkopycinski Sep 9, 2026
64ec8d4
feat(evals-ext): verify connectors deterministically, board attack di…
patrykkopycinski Sep 9, 2026
92054b5
fix(evals-ext): escape the step type before splicing it into a RegExp
patrykkopycinski Sep 9, 2026
147fa51
feat(evals-ext): document column provenance, list missing models, dif…
patrykkopycinski Sep 9, 2026
8a03b55
feat(evals-ext): cost and sign test for the blinding A/B
patrykkopycinski Sep 9, 2026
5e83be5
feat(evals-ext): measure and publish the connector false green
patrykkopycinski Sep 9, 2026
ce68e97
feat(evals-ext): render the connector false-green bug report from mea…
patrykkopycinski Sep 9, 2026
5b84ad5
fix(evals-ext): AD gate 130 docs (10 examples) after dense spec, requ…
patrykkopycinski Sep 10, 2026
f3689d9
fix(evals-ext): poll golden count until flush settles before gating
patrykkopycinski Sep 10, 2026
ee67c32
fix(evals-ext): gate flush poll waits for the exact target, not stabi…
patrykkopycinski Sep 10, 2026
457aebd
fix(evals-ext): extend AD gate poll to 25 min -- measured OTel score-…
patrykkopycinski Sep 10, 2026
eae5d34
fix(evals-ext): include eis-prefixed model ids in golden id resolution
patrykkopycinski Sep 10, 2026
8494407
fix(evals-ext): latest-execution lookup matches any model-id spelling
patrykkopycinski Sep 10, 2026
ab3e4d0
Sweep infra: security-persona-matrix-attack-discovery suite profile
patrykkopycinski Sep 10, 2026
9f7de5c
AD board: persona-matrix extract + renderer with trace cards
patrykkopycinski Sep 10, 2026
79129d9
Sweep: repoint PATCHED_SCOUT_CONFIG at evals-ext-matrix self-containe…
patrykkopycinski Sep 10, 2026
fdac8fc
TRACES_JSON builder: join golden score docs with arg-bearing spans
patrykkopycinski Sep 10, 2026
cb64d40
agent_eval_full renderer + per-prompt best-execution selection
patrykkopycinski Sep 10, 2026
9015efb
agent_eval_full: normalize golden model-id aliases to reference spelling
patrykkopycinski Sep 11, 2026
f9a5dd0
agent_eval_full: target the reference's exact 33-model list
patrykkopycinski Sep 11, 2026
afe30cc
evals-ext: omniroute judge path + EIS-trial (-3) board renderer
patrykkopycinski Sep 11, 2026
505e856
evals-ext: note union vs single-exec on multi-execution AD cards
patrykkopycinski Sep 11, 2026
bdd4344
evals-ext: honor PROXY_UPSTREAM in sweep proxy + judge proxy port 8089
patrykkopycinski Sep 11, 2026
e53b16b
evals-ext: default sweep judge to omniroute Opus 5 (selfhost-omni-opu…
patrykkopycinski Sep 11, 2026
546ef1b
evals-ext: align AD board test with 9f7de5c renderer contract
patrykkopycinski Sep 11, 2026
314f9b3
evals-ext: parameterize traces suite + agent_eval_full-3 board
patrykkopycinski Sep 11, 2026
79d420c
evals-ext: trial-era board + reference row order for agent_eval_full
patrykkopycinski Sep 12, 2026
f24f4fd
evals-ext: span-usage join for per-cell latency/tokens
patrykkopycinski Sep 12, 2026
a363e00
evals-ext: reliability hardening for the golden board pipeline
patrykkopycinski Sep 12, 2026
1380e34
evals-ext: newest-execution selection for latest-numbers semantics
patrykkopycinski Sep 13, 2026
3aa811d
Merge branch 'main' into feat/evals-extensions-matrix-v3
patrykkopycinski Sep 13, 2026
f4d3492
evals-ext: args-coverage golden gate + v8 image fixes for rerun wave
patrykkopycinski Sep 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions .buildkite/pipelines/evals/llm_evals.yml
Original file line number Diff line number Diff line change
Expand Up @@ -590,6 +590,55 @@ steps:
automatic:
- exit_status: '-1'
limit: 3

- label: "Evals: Security Persona Matrix"
key: kbn-evals-weekly-security-persona-matrix
command: bash .buildkite/scripts/steps/evals/run_suite.sh
env:
KBN_EVALS: '1'
FTR_EIS_CCM: '1'
EVAL_SUITE_ID: 'security-persona-matrix'
EVAL_FANOUT: '1'
EVAL_INCLUDE_EIS_MODELS: '1'
EVAL_MODEL_GROUPS: *weekly_eis_core_models
EVAL_SERVER_CONFIG_SET: 'evals_security_persona_matrix'
timeout_in_minutes: 90
agents:
image: family/kibana-ubuntu-2404
imageProject: elastic-images-prod
provider: gcp
machineType: n2-standard-8
diskSizeGb: 130
preemptible: true
retry:
automatic:
- exit_status: '-1'
limit: 3

- label: "Evals: Security Persona Matrix — Attack Discovery"
key: kbn-evals-weekly-security-persona-matrix-attack-discovery
command: bash .buildkite/scripts/steps/evals/run_suite.sh
env:
KBN_EVALS: '1'
FTR_EIS_CCM: '1'
EVAL_SUITE_ID: 'security-persona-matrix-attack-discovery'
EVAL_FANOUT: '1'
EVAL_INCLUDE_EIS_MODELS: '1'
EVAL_MODEL_GROUPS: *weekly_eis_core_models
EVAL_SERVER_CONFIG_SET: 'evals_tracing'
timeout_in_minutes: 90
agents:
image: family/kibana-ubuntu-2404
imageProject: elastic-images-prod
provider: gcp
machineType: n2-standard-8
diskSizeGb: 130
preemptible: true
retry:
automatic:
- exit_status: '-1'
limit: 3

- wait: ~
continue_on_failure: true

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,30 +22,18 @@ export const goldenClusterPrivileges = {
indices: [
{
names: [`${EvaluationIndices.SCORES}*`],
privileges: [
'auto_configure',
'create_index',
'create_doc',
'read',
'view_index_metadata',
],
privileges: ['auto_configure', 'create_index', 'create', 'read', 'view_index_metadata'],
},
{
names: ['traces-*'],
privileges: [
'auto_configure',
'create_index',
'create_doc',
'read',
'view_index_metadata',
],
privileges: ['auto_configure', 'create_index', 'create', 'read', 'view_index_metadata'],
},
{
names: [`${EvaluationIndices.DATASETS}*`, `${EvaluationIndices.DATASET_EXAMPLES}*`],
privileges: [
'auto_configure',
'create_index',
'create_doc',
'create',
'read',
'view_index_metadata',
'delete',
Expand Down
3 changes: 3 additions & 0 deletions x-pack/platform/packages/shared/kbn-evals-extensions/moon.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ dependsOn:
- '@kbn/dev-cli-runner'
- '@kbn/dev-cli-errors'
- '@kbn/tooling-log'
- '@kbn/config-schema'
- '@kbn/some-dev-log'
- '@kbn/kbn-client'
tags:
- test-helper
- package
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

import { buildMatrix } from '../../matrix/build_matrix';
import { renderMatrix } from '../../matrix/render_matrix';
import { parseMatrixConfig } from '../../matrix/load_matrix_config';
import type { AggregatedModelScores } from '../../matrix/query_matrix_scores';

describe('matrix command empty-result guard', () => {
const config = parseMatrixConfig({
columns: [{ id: 'triage', label: 'Triage', suites: ['suite-a'], weight: 1 }],
models: [{ id: 'model-a', label: 'Model A' }],
});

it('renders header-only CSVs when no experiments match', () => {
const rendered = renderMatrix(buildMatrix([], config), config);

expect(rendered.proprietaryCsv.trim().split('\n')).toHaveLength(1);
expect(rendered.openSourceCsv.trim().split('\n')).toHaveLength(1);
});

it('renders populated CSVs when experiments do match', () => {
const aggregated: AggregatedModelScores[] = [
{
modelId: 'model-a',
provider: 'anthropic',
suites: [
{
suiteId: 'suite-a',
experimentId: 'experiment-a',
datasets: [
{
datasetId: 'dataset-a-id',
datasetName: 'dataset-a',
evaluators: [{ evaluatorName: 'correctness', mean: 0.9, count: 10 }],
},
],
},
],
},
];

const rendered = renderMatrix(buildMatrix(aggregated, config), config);

expect(rendered.proprietaryCsv.trim().split('\n').length).toBeGreaterThan(1);
});

it('produces no model rows when no experiments match', () => {
const matrix = buildMatrix([], config);

expect(matrix.proprietary).toHaveLength(0);
expect(matrix.openSource).toHaveLength(0);
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

import Fs from 'fs';
import Path from 'path';
import { createFailError, createFlagError } from '@kbn/dev-cli-errors';
import type { Command } from '@kbn/dev-cli-runner';
import {
EvalsClient,
getEvaluationsKbnClient,
envFromDatasetsProfile,
DEFAULT_EVALUATIONS_KBN_URL,
} from '@kbn/evals';
import { KbnClient } from '@kbn/kbn-client';
import { loadMatrixConfig, applyModelOverrides } from '../../matrix/load_matrix_config';
import type { MatrixConfig } from '../../matrix/load_matrix_config';
import { queryMatrixScores } from '../../matrix/query_matrix_scores';
import { buildMatrix } from '../../matrix/build_matrix';
import { renderMatrix } from '../../matrix/render_matrix';
import { renderMatrixHtml } from '../../matrix/render_matrix_html';
import { queryMatrixTraces } from '../../matrix/query_matrix_traces';
import type { MatrixTraceData } from '../../matrix/trace_types';

const DEFAULT_OUT_DIR = 'target/llm_matrix';

export const matrixCmd: Command<void> = {
name: 'matrix',
description: `
Generate an LLM performance matrix artifact from exported evaluation results.

Reads the latest experiment per (model, suite) from the evals plugin on the
target Kibana, maps suites/datasets/evaluators onto matrix columns via a config
file, normalizes scores onto a 0-10 scale, and writes markdown + CSV + JSON.

Configure target/auth with EVAL_KBN_URL and EVAL_KBN_API_KEY,
with --kbn-url/--kbn-api-key, or with --profile (e.g. dev-vault for the golden
cluster, or a config.<name>.json file).

Example:
node scripts/evals ext matrix \\
--config .buildkite/pipelines/evals/security_matrix.config.json \\
--profile dev-vault --branch main --out target/llm_matrix
`,
flags: {
string: [
'config',
'out',
'branch',
'lookback-days',
'profile',
'kbn-url',
'kbn-api-key',
'model',
],
boolean: ['html'],
allowUnexpected: false,
help: `
--config Path to the matrix config JSON (required).
--out Output directory for artifacts (default: ${DEFAULT_OUT_DIR}).
--branch Git branch filter override (default: config.branch).
--lookback-days Only consider experiments newer than now-<n>d (default: config.lookbackDays).
--model Replace the config's model set for an on-demand run.
Format: id[:label][:open-source]. Repeatable.
e.g. --model gpt-5-preview:GPT-5 --model qwen3:Qwen3:open-source
--profile Golden-cluster config profile providing EVAL_KBN_URL/API_KEY
(e.g. 'dev-vault' for runtime Vault, or a config.<name>.json file).
--kbn-url Kibana URL override.
--kbn-api-key Kibana API key override.
--html Also generate a self-contained HTML report (matrix.html).
`,
},
run: async ({ log, flagsReader }) => {
const configPath = flagsReader.string('config');
if (!configPath) {
throw createFlagError('--config is required. Provide the path to a matrix config JSON.');
}

const repoRoot = process.cwd();
const baseConfig = loadMatrixConfig(Path.resolve(repoRoot, configPath));

const modelOverrides = flagsReader.arrayOfStrings('model') ?? [];
let config: MatrixConfig;
try {
config = applyModelOverrides(baseConfig, modelOverrides);
} catch (error) {
throw createFlagError(error instanceof Error ? error.message : String(error));
}
if (modelOverrides.length > 0) {
log.info(
`Overriding config model set with ${
config.models.length
} on-demand model(s): ${config.models.map((model) => model.id).join(', ')}`
);
}

const profile = flagsReader.string('profile') ?? undefined;
const profileEnv = envFromDatasetsProfile(repoRoot, profile);

const evaluationsKbnUrl =
flagsReader.string('kbn-url') ?? profileEnv.EVAL_KBN_URL ?? process.env.EVAL_KBN_URL;
if (!evaluationsKbnUrl) {
log.warning(`EVAL_KBN_URL not set; defaulting to ${DEFAULT_EVALUATIONS_KBN_URL}.`);
}

const evaluationsKbnApiKey =
flagsReader.string('kbn-api-key') ??
profileEnv.EVAL_KBN_API_KEY ??
process.env.EVAL_KBN_API_KEY;

const branch = flagsReader.string('branch') ?? config.branch;
const lookbackDaysFlag = flagsReader.string('lookback-days');
const lookbackDays = lookbackDaysFlag ? Number(lookbackDaysFlag) : config.lookbackDays;
if (Number.isNaN(lookbackDays) || lookbackDays < 1) {
throw createFlagError('--lookback-days must be a positive number.');
}

const outDir = Path.resolve(repoRoot, flagsReader.string('out') ?? DEFAULT_OUT_DIR);
const suiteIds = [...new Set(config.columns.flatMap((column) => column.suites))];
// Query per (suite, model) pair: the experiments route answers from a
// terms aggregation that grows with the page number, so the listing must
// stay bounded per pair. Include matchIds so aliased model rows are found.
const modelIds = [
...new Set(config.models.flatMap((model) => [model.id, ...(model.matchIds ?? [])])),
];

const defaultKbnClient = new KbnClient({ log, url: DEFAULT_EVALUATIONS_KBN_URL });
const kbnClient = getEvaluationsKbnClient({
kbnClient: defaultKbnClient,
log,
evaluationsKbnUrl,
evaluationsKbnApiKey,
});
const evalsClient = new EvalsClient(kbnClient, log);

try {
await evalsClient.assertPluginEnabled();
} catch (error) {
throw createFlagError(
[
error instanceof Error ? error.message : String(error),
'Set EVAL_KBN_URL to a Kibana instance with xpack.evals.enabled=true.',
'Set EVAL_KBN_API_KEY when authenticating to a non-local target.',
].join('\n')
);
}

log.info(
`Querying matrix scores from ${evaluationsKbnUrl ?? DEFAULT_EVALUATIONS_KBN_URL} (branch: ${
branch ?? 'any'
})`
);

const aggregated = await queryMatrixScores(evalsClient, log, {
suiteIds,
modelIds,
branch,
lookbackDays,
});

if (aggregated.length === 0) {
// Empty CSVs would publish as a blank matrix in customer-facing docs.
throw createFailError(
[
'No experiments matched the configured filters, refusing to write an empty matrix.',
`Filters: suites=[${suiteIds.join(', ')}] models=[${modelIds.join(', ')}] branch=${
branch ?? 'any'
} lookbackDays=${lookbackDays}`,
'Check that the weekly eval run published results for these suites in the lookback window.',
].join('\n')
);
}

const matrix = buildMatrix(aggregated, config);
const rendered = renderMatrix(matrix, config, {
branch,
lookbackDays,
suiteIds,
commitSha: process.env.BUILDKITE_COMMIT,
buildUrl: process.env.BUILDKITE_BUILD_URL,
});

Fs.mkdirSync(outDir, { recursive: true });
const writes: Array<[string, string]> = [
['proprietary-models.csv', rendered.proprietaryCsv],
['open-source-models.csv', rendered.openSourceCsv],
['matrix.md', rendered.markdown],
['matrix.json', rendered.json],
// Raw, pre-scaling per-evaluator means/counts, so reviewers can audit which
// evaluators feed a cell without re-querying.
['scores.debug.json', `${JSON.stringify(aggregated, null, 2)}\n`],
];
for (const [fileName, contents] of writes) {
Fs.writeFileSync(Path.join(outDir, fileName), contents);
}

const generateHtml = flagsReader.boolean('html');
if (generateHtml) {
log.info('Querying trace data for HTML report...');
const traces: MatrixTraceData = await queryMatrixTraces(evalsClient, log, aggregated);
const htmlContent = renderMatrixHtml(
matrix,
config,
{
branch,
lookbackDays,
suiteIds,
commitSha: process.env.BUILDKITE_COMMIT,
buildUrl: process.env.BUILDKITE_BUILD_URL,
},
traces
);
Fs.writeFileSync(Path.join(outDir, 'matrix.html'), htmlContent);
log.info(`Wrote matrix.html to ${outDir}`);
}

log.info(
`Wrote matrix artifacts to ${outDir} ` +
`(${matrix.proprietary.length} proprietary, ${matrix.openSource.length} open-source models)`
);
log.info(`\n${rendered.markdown}`);
},
};
Loading
Loading