Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
1493840
feat: add web search benchmark and streamline report checks
lanyue-llk Oct 21, 2026
515c0d8
fix: satisfy repository lint gate
lanyue-llk Oct 21, 2026
fc650a9
fix: clarify search report evaluation scopes
lanyue-llk Oct 21, 2026
b016c8b
fix: honor local report language configuration across builds
lanyue-llk Oct 21, 2026
aaf2d1b
fix: expose search verdict criteria and reference evidence
lanyue-llk Oct 21, 2026
1445487
fix: unify search relevance annotations and separate report cohorts
lanyue-llk Oct 21, 2026
5cdeb0a
feat: add traceable model relevance judgments for complete search coh…
lanyue-llk Oct 21, 2026
7ddcf83
fix: stabilize complete search relevance grading and explanations
lanyue-llk Oct 21, 2026
f7f3ede
docs: bind complete search relevance report release
lanyue-llk Oct 21, 2026
02b1793
fix: close Search evaluation review and report integrity gaps
lanyue-llk Oct 21, 2026
3bf7cff
fix: retain Replay dependencies in browser interaction CI
lanyue-llk Oct 21, 2026
d699bde
feat: bind complete independent Search review to report releases
lanyue-llk Oct 21, 2026
41e314d
fix: apply reviewed Search source rules and evidence boundaries
lanyue-llk Oct 21, 2026
579ea4e
fix: exclude evaluation records from Search answer-cue diagnostics
lanyue-llk Oct 21, 2026
b4d4046
fix: align Search result views with reviewed quality scope
lanyue-llk Oct 21, 2026
6a82a65
docs: bind the fully reviewed Search report release
lanyue-llk Oct 21, 2026
84afbaf
Use reviewed query counts in Search report reading pages
lanyue-llk Oct 22, 2026
ed3a944
Bind the streamlined Search report publication
lanyue-llk Oct 22, 2026
7ca59b1
Restructure search comparison around reader decisions
lanyue-llk Oct 22, 2026
7fda032
Bind the restructured Search report release
lanyue-llk Oct 22, 2026
a19e773
Restore complete benchmark quality summaries and result interpretation
lanyue-llk Oct 22, 2026
89a2e83
Bind the complete Search benchmark summaries release
lanyue-llk Oct 22, 2026
6909190
Fix Search report review contracts and retire duplicate build paths
lanyue-llk Oct 22, 2026
b786b2b
Close Search review integrity gaps and verify report release inputs
lanyue-llk Oct 22, 2026
45c68ac
Bind the reviewed Search report update to its existing site
lanyue-llk Oct 22, 2026
6c3426f
Fix Search collection, review scope and staged publication contracts
lanyue-llk Oct 22, 2026
d432a79
Bind the Search report update to its published evidence
lanyue-llk Oct 22, 2026
2d80512
Fix review runtime cleanup and reuse shared report publication
lanyue-llk Oct 22, 2026
3813822
Record the shared-publisher Search report release
lanyue-llk Oct 22, 2026
7319dda
Move Search benchmark ownership to lexbench-websearch
lanyue-llk Oct 22, 2026
657bcab
Bind the independent-benchmark report publication
lanyue-llk Oct 22, 2026
a8fd6ff
refactor(search)!: select external report instances explicitly
lanyue-llk Oct 23, 2026
215d6ce
refactor(search): remove report-specific benchmark authority and vali…
lanyue-llk Oct 23, 2026
25351d0
fix(search): support shared publication service under an HTTPS path
lanyue-llk Oct 23, 2026
b4bd4fb
fix(reporting): keep interaction tests aligned with maintained fixtures
lanyue-llk Oct 23, 2026
e250b9e
fix(dependencies): bind the first Search edition after the main rebase
lanyue-llk Oct 23, 2026
273d4d0
fix(review): preserve delivery diagnostics and follow installed bench…
lanyue-llk Oct 23, 2026
38dd028
fix(review): restore base CI and enforce benchmark ownership
lanyue-llk Oct 23, 2026
d8468a7
feat(search): add reviewed SERP retrieval comparisons
lanyue-llk Oct 23, 2026
6f37c62
feat(reporting): identify report builds and prepare v0.2.0 (#66)
lanyue-llk Oct 23, 2026
7cbd5fc
feat(search): bind corrected benchmark and report build versions
lanyue-llk Oct 23, 2026
720204f
docs(releases): make version changes human-triggered
lanyue-llk Oct 23, 2026
3fddedc
fix(search): preserve interrupted calls and report scoring scopes
lanyue-llk Oct 23, 2026
c4e0e40
fix(search): keep recovery accounting and review rounds consistent
lanyue-llk Oct 23, 2026
6e6f5a3
Merge pull request #63 from lexmount/codex/serp-api-benchmark
lanyue-llk Oct 23, 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
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ The dashboard reading page and standalone HTML are two presentations of the same

Treat report home and interpretation pages as reusable presentation material. Each section should communicate one conclusion through a chart, meaningful diagram, image, or inspectable evidence specimen, with concise supporting text and exact values available to copy. Do not use decorative background art or repeat the same dense table across summary, interpretation, and analysis. Result analysis owns filterable inventories and detailed distributions; result pages own logs and complete evidence.

Generate Chinese by default. English prose, illustrations, rendering and language-specific checks run only on an explicit manual request. An absent English edition gets a not-generated notice and a return link, not stale translated pages. Preserve translation sources without distributing unused English assets. Apply cross-language parity checks only when both editions are generated; always test the notice in a Chinese-only release.
Public build entries default to English, with an explicit language or BROWSER_EVAL_REPORT_LANGUAGE override. For agent-authored delivery, select the conversation language unless the user specifies another edition. Rebuilds preserve the saved primary language; additional translations require an explicit request. An absent English edition gets a not-generated notice and a return link, not stale translated pages. Preserve translation sources without distributing unused English assets. Apply cross-language parity checks only when both editions are generated; always test the notice in a Chinese-only release.

## Reading layout

Expand All @@ -20,7 +20,7 @@ Reference and actual output should be easy to compare. Preserve original snippet

## Artifact verification

Generate the integrated and self-contained views from the same source. The standalone file must work without the dashboard, external fonts or CDN libraries; use the repository's script-free export contract. Inspect light/dark, desktop/phone and print presentations after the final change, not only an earlier screenshot.
Generate the integrated and self-contained views from the same source. The standalone file must work without the dashboard, external fonts or CDN libraries; use the repository's script-free export contract. Inspect each delivered top-level page locally for content and layout. Reusable component tests own theme, narrow-screen, evidence-dialog and navigation behavior; do not repeat remote click tours for each publication.

Escape dataset-derived text and validate links and paths. Exclude credentials, local paths, private reference URLs, work logs and editing discussion from the public bundle. Secret scans supplement source inspection.

Expand Down
78 changes: 75 additions & 3 deletions .agents/skills/benchmark-report/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,16 @@ An explicitly requested diagnostic report may be delivered separately from a cer

## Working contract

Public report CLIs default to English where supported and expose `--language en|zh`. Preserve the selected language on rebuild. English builds retain the matching Chinese edition; keep measured material in its source language. Historical Chinese-only renderers must disclose that limit and reject unsupported requests. Bind generated languages and the selected entry in report metadata. English navigation opens a not-generated notice when absent; never publish stale English pages. Validate each generated edition and retain route, value and evidence-link parity checks when both exist.
Version changes require an explicit human release request. Code synchronization, review fixes, tests and report rebuilds must not automatically bump package, benchmark or report edition numbers, rewrite frozen release catalogs, or create/push release tags. Reuse existing build versions and record source hashes; keep unreleased changes separate from a certified edition.


Public report CLIs fall back to English. `BROWSER_EVAL_REPORT_LANGUAGE` changes the environment default; an explicit `--language` wins, and a rebuild preserves the saved primary language. For an agent-driven build, select the language from the current conversation. English builds retain the matching Chinese edition; a Chinese selection does not generate an English translation unless explicitly requested. Keep measured material in its source language. Historical Chinese-only renderers must disclose that limit and reject unsupported requests. Bind generated languages and the selected entry in report metadata. English navigation opens a not-generated notice when absent; never publish stale English pages. Validate each generated edition and retain route, value and evidence-link parity checks when both exist.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[minor] The benchmark-editorial skill still says Chinese by default

This skill's language contract now falls back to English with an environment override. .agents/skills/benchmark-editorial/references/html-delivery.md:7, untouched by this PR, still says 'Generate Chinese by default. English ... only on an explicit manual request'. An agent that loads both skills gets contradictory defaults. Update html-delivery.md in this PR.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[minor · open] The benchmark-editorial skill still says Chinese by default

This skill's language contract now falls back to English with an environment override. .agents/skills/benchmark-editorial/references/html-delivery.md:7, untouched by this PR, still says 'Generate Chinese by default. English ... only on an explicit manual request'. An agent that loads both skills gets contradictory defaults. Update html-delivery.md in this PR.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[minor · open] The benchmark-editorial skill still says Chinese by default

This skill's language contract now falls back to English with an environment override. .agents/skills/benchmark-editorial/references/html-delivery.md:7, untouched by this PR, still says 'Generate Chinese by default. English ... only on an explicit manual request'. An agent that loads both skills gets contradictory defaults. Update html-delivery.md in this PR.


1. Establish the decision being supported, the measured unit, cohort, versions, execution location, freshness policy, and intended deliverable. Inspect the actual dataset, runner, outputs, scorer, prior review evidence, and current report. Do not infer them from screenshots or prose.
2. Freeze a machine-readable evaluation contract before expensive calls. It must identify the exact cases and methods, run count, timeout, concurrency policy, input and output contract, scoring provenance, reference state, and publication target when one exists. Existing compiled reference answers are frozen by default. Source metadata, capture dates, and absent newer acceptance-contract fields do not imply a live-reference task. Only tasks explicitly declaring `source_verification.reference_mode: live_exact` require live checks. For those tasks, fail closed: verify and freeze references immediately before calls, verify the same declared scope afterward, and certify the cohort only when both checks pass. An unchanged compiled acceptance-contract dataset is already the benchmark input: freeze its task and rule bytes for execution, without requiring historical source-qualification raw files or re-auditing cohort admission. Qualify sources when adding tasks or changing references/acceptance rules; do not turn an ordinary version rerun into dataset reconstruction. Partial or uncertified cohorts remain diagnostic evidence and cannot enter a release.
3. Let each method use its strongest documented route to produce the required output. Equalize the task, inputs, output contract, call budget, and scoring. Do not require identical internals. For fixed-native cohorts, declare the input media type independently of URL patterns and expected answers, freeze the class-level route and transport parameters before calls, and verify the retained request receipts at aggregation and release. Record material asymmetries such as local versus remote execution, cold versus warm start, bundled conversion, network transit, account tier, and billable time.
4. Preserve evidence as an append-only chain by default: task definition, reference, provider call, raw artifact, normalized artifact, score, review, revision, and release. If the user explicitly requests deletion of superseded history, validate the chain first and use the existing owner's current-only authority described in [audit and revision](references/audit-and-revision.md); remove obsolete full snapshots rather than storing reverse patches. Keep current provider outputs, call identities, real scoring sources and necessary review evidence immutable. Routine refresh and publication reuse current inputs without redundant historical snapshots. A presentation or scoring change must not masquerade as a new provider result. Declare the native answer fields and validate their structural projection before accepting a scored artifact. Adapters must not remove returned candidates by URL meaning or consult expected answers when selecting candidate fields. Apply privacy redaction only to separately identified public views after scoring, preserving the private originals and distinguishing original, scored and public-view hashes.
5. Separate retrieval success, task acceptance, content quality, latency, cost, and freshness. A missing or partial reference makes the affected metric unavailable or scoped; it does not prove success or failure. Do not derive binary acceptance from an unrelated aggregate similarity score.
5. Separate retrieval success, task acceptance, content quality, latency, cost, and freshness. Treat missing telemetry as unavailable. A request that received no first byte contributes to total latency, but not to first-byte or body-transfer stage means; show each stage’s observed population. A missing or partial reference makes the affected metric unavailable or scoped; it does not prove success or failure. Do not derive binary acceptance from an unrelated aggregate similarity score.
6. For heterogeneous same-window latency evidence, preserve the full predeclared task-by-method matrix. Show all-call latency on that common denominator separately from successful-call latency on each method's conditional subset. Treat the all-method shared-pass intersection as a diagnostic, never as a post-outcome selector or ranking sample.
7. At aggregate and publication boundaries, copy only explicit hash-bound evidence and public audit files. Reject symlinks and exclude worker trees, host paths, credentials, and internal run logs. Verify primary, auxiliary, delivered-file, and retained retry artifacts before release.
When a saved-input handoff needs host-metadata redaction, use the shared publication privacy owner. Preserve private originals and distinguish original from public file hashes; rebind dependent metadata references and disclose auxiliary debug-log projections. Never rewrite original scored answers, references or response payloads as a privacy repair. When a scored answer or native envelope itself contains private values, create a separately identified post-score public view through the shared privacy owner, verify its native-field projection and unchanged task verdict, and disclose that omitted original bytes cannot be reconstructed from the public copy. A public frozen presentation must explicitly bind its complete view inventory, verify displayed bytes against those views, keep acquisition gates strict, and distinguish preserved original diagnostics from what redacted text can reproduce. Verify unchanged verdicts, timings and review decisions, and rebuild from the public inputs. Keep regenerated package/report wrappers outside the original-input projection receipt so normal rebuilding does not invalidate it or create circular hashes.
Expand All @@ -46,7 +49,7 @@ For an explicitly requested full review, set `independent_result_review_scope: a

9. Rerun only calls whose inputs, provider route/version, runtime contract, or source validity changed. Recompute downstream scores and reports without provider calls when only scoring, annotations, or presentation changed. Never retry merely to obtain a better result. A reference or verdict correction must identify the shared root cause and add executable positive/negative controls through the production scorer; bind those regression IDs in the revision receipt instead of patching stored verdicts.
10. Build the public report from the frozen evidence. Every page should answer a reader question. Show task and run identifiers, the exact expected-versus-actual evidence behind a verdict, denominators and unavailable metrics, method differences, limits, concise reproduction instructions, and a compact review history.
11. Release only after code tests, evidence integrity, report links, responsive/visual checks, secret scans, target-site checks, and deployed-output verification pass. Preserve earlier sites unless replacement was explicitly requested.
11. Release only after code tests, evidence integrity, report links, deterministic interaction checks, the one-pass top-level-page reader review, secret scans, target-site checks, and deployed-output verification pass. Responsive and theme matrices belong to shared renderer tests when those owners change; do not replay them for every report release. Preserve earlier sites unless replacement was explicitly requested.
12. Present one authoritative logical result per method and task. The frozen protocol chooses the score-bearing execution; a renderer must never silently replace that rule. Keep every physical call in the evidence chain retain accumulated execution cost separately from the declared primary latency metric. State whether primary latency measures the final call or the complete user-visible operation; retries never increase the logical-result denominator. Do not make execution ordinal labels part of the public comparison unless retry behavior is the declared subject.
13. Apply the track-independent presentation contract in [report and release](references/report-and-release.md) to every report, including a new track. Wire semantic checks into its release command; prose instructions alone are not a release gate.
14. In this repository, publish a finished report to the Artifact Site host and site bound by that track’s current profile, following that host’s current `for-agents.md`. Never embed a default deployment hostname or borrow a target from another report. Build and validate before the external write, bind the returned slug, share URL, and version in the current profile, use optimistic locking for later updates, and verify the unauthenticated share page. Use repository publish targets when available; do not reconstruct a target from prose or an earlier receipt. Export the whole deployed tree only when the specific report publisher requires it or when diagnosing a release failure.
Expand Down Expand Up @@ -81,3 +84,72 @@ capacity-bound data attachments through the existing packer. Check their combine
evidence before uploading, bind immutable published versions, and include the
attachment archives and target registry in the main publication snapshot. Keep
one report entry and all evidence; reject unresolved or changed data attachments.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[minor] Search-report-specific guidance added to the shared skill

Lines 76-94, added across several report-iteration commits, cover the relevance annotation workflow, the 'subset discovery claim', 'remove duplicate reading routes when consolidating' and 'Restore complete benchmark quality summaries'. They sit under 'Stop conditions' in the generic skill and read as responses to specific Search report revisions. AGENTS.md says to keep report-specific findings out of instructions and to put track behaviour in the owning code. Move the Search workflow to harness/web_search/README.md or a skill reference, keep only general rules here, and enforce them in the Search release check.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[minor · open] Search-report-specific guidance added to the shared skill

Lines 76-94, added across several report-iteration commits, cover the relevance annotation workflow, the 'subset discovery claim', 'remove duplicate reading routes when consolidating' and 'Restore complete benchmark quality summaries'. They sit under 'Stop conditions' in the generic skill and read as responses to specific Search report revisions. AGENTS.md says to keep report-specific findings out of instructions and to put track behaviour in the owning code. Move the Search workflow to harness/web_search/README.md or a skill reference, keep only general rules here, and enforce them in the Search release check.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[minor · open] Search-report-specific guidance added to the shared skill

Lines 76-94, added across several report-iteration commits, cover the relevance annotation workflow, the 'subset discovery claim', 'remove duplicate reading routes when consolidating' and 'Restore complete benchmark quality summaries'. They sit under 'Stop conditions' in the generic skill and read as responses to specific Search report revisions. AGENTS.md says to keep report-specific findings out of instructions and to put track behaviour in the owning code. Move the Search workflow to harness/web_search/README.md or a skill reference, keep only general rules here, and enforce them in the Search release check.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[minor · open] Search-report-specific guidance added to the shared skill

Unchanged at the new head. The paragraphs on the Web Search relevance annotation workflow, the 'subset discovery claim' and 'remove duplicate reading routes when consolidating' still sit in the generic benchmark-report skill. AGENTS.md says to keep report-specific findings out of instructions. Move the Search workflow to harness/web_search/README.md or a skill reference and enforce it in the Search release check.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[minor · open] Search-report-specific guidance added to the shared skill

Unchanged at the new head. The paragraphs on the Web Search relevance annotation workflow, the 'subset discovery claim' and 'remove duplicate reading routes when consolidating' still sit in the generic benchmark-report skill. AGENTS.md says to keep report-specific findings out of instructions. Move the Search workflow to harness/web_search/README.md or a skill reference and enforce it in the Search release check.

Web Search relevance labels cover every in-house case with the same frozen rubric.
Use named human annotations by default. When the user explicitly selects a model
judge, use `scripts/judge_search_relevance.py` and retain the exact model, prompt,
blind inputs, raw responses and quoted scoring evidence. Label the result as model
preview relevance rather than human gold judgments. Both routes import through
`--relevance`; neither may substitute nonempty responses or URL checks for labels.
Keep empty queries and all-zero pools in the score population.
For explicit website or official-source requirements, bind independently
qualified URL rules and check eligibility before model grading. Ordinary
diagnostic domains must not become mandatory sources. Keep source URLs out of
content-only judging, retain original model grades, and bind rubric corrections
separately from immutable search calls.
Register explicit official-source and platform/genre requirements in every query
language; organization names used only as diagnostics do not impose a source
restriction. Qualify valid official alternative domains independently. When
source rules change, reuse original judge calls and regrade only cases whose
actual judge inputs changed.

When published references contain terminal footnotes or fused citation URLs,
separate that metadata only in a versioned answer derivation. Preserve the
original answer, keep answers that are themselves URLs intact, and bind paired
public-scorer/task-predicate controls before any offline recomputation.

Make hash-bound original query sources reachable from the dataset page.
A provenance hash without an inspectable source does not support a reader’s
source check. Keep the source author’s historical results separate from current
benchmark measurements.

Review packets must use the same adapter, request-bound URL resolution and
organic-slot projection as the scored response, and reject a projection/hash
mismatch. Independent factual verification needs live read-only source access;
retain physical review inputs and outputs privately and publish path-free
provenance projections with distinct original and public hashes. A rate-limited
review stops new jobs and resumes only missing packets.

For native SERP adapters, retain the complete response but score the declared
organic slots in their original order. Test wrapped JSON, absent optional
snippets, relative links and invalid entries inside versus outside the cutoff.
For new search cohorts, finish one provider's complete case set before starting
the next provider; never interleave providers by query. Continuing a frozen
cohort preserves its existing execution order.
A shared projection correction uses the versioned assessment revision over
hash-bound saved responses, with paired controls and zero new search calls.
Before finite-quota collection, reserve configuration probes and validate the
complete matrix's worst-case physical call count; resuming must count retained
calls as well as current logical results.
When a remote native interface changes during collection, stop further calls,
prove the supported replacement request, and bind an execution revision before
resuming. Recollect the declared changed-method scope while preserving complete
unaffected calls. Keep archived physical calls in quota accounting, including
when a second interruption occurs during the correction.


For Search comparison reports, keep decision summaries distinct from complete result
and audit inventories. A subset discovery claim must show every selected provider
on that same subset; the headline relevance score covers the full declared relevance
population. Give quality, collection timing/billing, input provenance and original
responses distinct owners, and remove duplicate reading routes when consolidating them.

Search builds and scoring reuse validate evidence without rechecking report HTML.
Combine the final `--release-check` and `--export-delivery` into one pass. Subsequent
packaging and upload verify the accepted file tree instead of repeating page checks.

Conciseness must preserve the evidence needed for the decision. Keep each independent
benchmark’s primary quality measures and denominator visible in the home comparison;
do not replace them with a narrow diagnostic or hide them inside disclosure controls.
Reorganization must account for each substantive finding, calculation and evidence
entry before retiring a section.
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ Choose checks from the changed surface:
| --- | --- |
| Metric value or comparison logic | Unit test the semantic contract and independently recompute affected derived values |
| Table markup or emphasis | Render representative directional, tied, missing, and observational rows |
| Navigation or drill-down | Check every top-level route and one representative result-to-evidence path |
| CSS, layout, or responsive behavior | Visually inspect affected page types at desktop and narrow viewport widths |
| Navigation or drill-down | Deterministically check all routes and links; render every top-level page once |
| CSS, layout, or responsive behavior | Run shared component coverage; visually inspect only the affected page types at one representative width |
| Text-only wording | Factual and terminology review; no visual sweep unless wrapping or hierarchy changes |
| Release metadata only | Binding and destination check only |

Expand Down
Loading