Repository navigation
Make Web Fetch method metadata reusable across versions and cohorts - #59
Conversation
This reverts commit a5da00f.
lanyue-llk
left a comment
There was a problem hiding this comment.
Reviewed at 13a8bf2. Two reproducible metadata/reproduction defects need changes; see inline comments.
The purpose is to separate reusable bilingual product documentation from saved execution facts, consolidate method metadata, and preserve source-bound historical resource projection. The catalog, template inheritance and source-hash parser registry are suitable abstractions. The historical parser registry is keyed by implementation identity rather than report/task names, so it does not require a branch for each report. Additional classes are unnecessary; the remaining defects are identity precedence and the boundary between product-level documentation and participant-specific executable configuration.
Validation: 652 existing targeted tests and 40 subtests passed across method registration, interfaces, capability sources, execution contracts, report presentation, native projection/routes, resource boundaries, dependency updates and local revision/report builds. Six added regression scenarios fail: five executable-variable bindings and one unknown recorded engine. No provider calls, measured-result review, publication or source changes were performed.
Report-instance coupling is reduced, but still exists in the current renderer. In generate_wcxb, the accounts output still hard-codes Moli 1.1.8, and nearby cohort descriptions assume six configurations. These predate this PR and are not additional introduced-bug findings. They should come from the profile/participant data before this renderer can be described as independent of a particular report instance; moving product prose into a catalog alone does not remove them.
lanyue-llk
left a comment
There was a problem hiding this comment.
Rechecked the latest head against the earlier findings and the requirement to reuse report code across versions and participant cohorts. The existing executable-variable and unknown-engine controls now pass. 207 focused tests passed, including six earlier review controls. One additional scenario still fails: adding an already registered version alias to an otherwise complete WCXB renderer input crashes in the newly introduced route-description dictionary. A separate alias-renaming control also confirms the remaining fixed Moli comparison dependency. No saved evidence or production code was changed.
lanyue-llk
left a comment
There was a problem hiding this comment.
P0/P1-focused follow-up at 887c8a0: no new P0 or P1 finding in the examined scoring/projection compatibility, saved-evidence verification, implementation identity, execution metadata and report-generation boundaries. 320 targeted tests passed, including the earlier method-identity controls. Three additional controls passed: a distinct registered version can join the cohort, the baseline can use its registered alias, and duplicate binary identities are rejected as ambiguous. The earlier two alias crashes are fixed. The additional version control supplies its distinct binary hash and retained artifacts; the renamed baseline retains its original binary identity and supplies the renamed artifact path. Historical projection tests cover exact source-bound replay and missing/unknown parser rejection. This is a focused review result, not an approval of historical benchmark scores or a claim that all saved provider outputs were rescored.
Web Fetch reports could reuse an earlier run's settings and describe registered examples as measured facts. This change makes saved execution evidence authoritative, centralizes reusable bilingual method metadata, and removes retired report-specific paths. It also repairs source-bound replay of historical resource projections without changing saved answers or scores.
Reader-visible changes
Scoring semantics and evidence compatibility
Fixes #60. Current resource declarations explicitly record their parser:
{"format": "html_attribute_urls", "pointer": ["elements"], + "srcset_parser": "html-candidates-v1", "base_url": "https://example.invalid/page"}The current parser preserves commas inside URLs and handles HTML candidate descriptors. Historical declarations without that field select semantics only through a proven scoring-source hash. The cached registry maps hashes to parser identities and records the repository, exact revision, source path and source SHA-256. It contains no report names, task IDs or saved answers. Unknown identities and conflicting explicit declarations fail; the reader never tries a different parser to make an answer match.
The registry includes the two previously proven comma-splitting sources, an additional identical legacy implementation discovered by scanning saved records, and main's corrected parser whose caller omitted the declaration. For main, evaluator revision
84c177d97da3b82567d9881e377aa728929cf129recomputes to scoring hash7e1b468e981cfe1da89d443047aff7facd841cd03f00bfc4b016ed67ba292da3; itsresource_urls.pybytes match the currently installed parser. The additional legacy source was independently reconstructed at repository revision4ef472ff151274e9c526be58bf0e056a1591f420.The synthetic route baseline changes 18 provider/configuration hashes, not 16. These bind the entire native-projection source file, so changing that file changes the policy identity even for routes without
srcset. Substituting the previous source bytes reproduces the complete previous baseline exactly; invocation parameters are unchanged. The earlier parser-declaration commit and this registry/cache change were checked separately.Validation:
UV_OFFLINE=1 make cipasses on20e74000: 6,304 Python tests and 2,742 subtests passed, 114 skipped, plus naming/lint, JavaScript UI, native adapter, fixture and all installed-wheel checks. Focused regressions passed (317 tests and 35 subtests). The repeated read-only saved-answer inventory confirms the missing parser bindings are repaired with no new failures; unrelated archived-file hash failures remain rejected, and records without declarations are not counted as validated projections. Full inventory and before/after diagnostics remain private rather than entering Git. Frozen data is unchanged. GitHub CI for20e74000also passed (run 39723772127): 6,279 tests and 2,742 subtests passed, 139 skipped; all installed-wheel checks passed, rendered reference capture passed (24 passed, 1 skipped), and Base CLI checks passed on Python 3.12, 3.13 and 3.14. The optional Claude review was skipped, not counted as a passed review.Recorded identity and installation bindings
moliwith recorded enginenew-enginekeeps that identity and receives no Moli installation instructions.Validation at
6d994aae:UV_OFFLINE=1 make cipassed locally: 6,313 Python tests and 2,742 subtests passed, 114 skipped, followed by the JavaScript UI, native-adapter, fixture and installed-wheel gates. GitHub CI run 39749929169 passed on the same commit: 6,288 tests and 2,742 subtests passed, 139 skipped; installed-wheel gates passed; rendered reference capture passed (24 passed, 1 skipped); Base CLI checks passed on Python 3.12, 3.13 and 3.14. Optional Claude Review was skipped.WCXB findings and release checks
The renderer no longer repeats the historical PR-specific case findings on the home page. Interpretation stays in the existing external, hash-bound bilingual guide. The home page retains measured comparisons and links to that guide; it no longer asserts historical batch dates or source-code causation for a new cohort.
Validation at
a295474d: 6,316 Python tests and 2,742 subtests passed locally (114 skipped), along with UI/native-adapter/fixture checks. The package gate was rerun after the final source cleanup and passed. The final focused WCXB checks also passed. GitHub CI run 39755465011 passed on this commit: 6,291 Python tests and 2,742 subtests passed (139 skipped), all installed-wheel gates passed, rendered reference capture passed (24 passed, 1 skipped), and Base CLI checks passed on Python 3.12, 3.13 and 3.14. Optional Claude Review was skipped. The PR remains unmerged.Configuration migration and review decisions
Validation at
13a8bf24: all 55 report registry tests pass. GitHub CI run 39735168522 passed, including the complete main test job and Python 3.12/3.13/3.14 Base CLI checks. Optional Claude Review was skipped.Moli now inherits
native_markdown_browserand overrides onlydocumentwithintask_capabilities; its owntask_interfaceslist is unchanged. The complete resolved Chinese and English entries are field-for-field identical to20e74000, with compact canonical-hash regression checks for both languages. Other translation cleanup and report extraction remain outside this change. Remote main was checked at28534e24, still pinning evaluator84c177d9; no additional historical parser binding is needed.Product metadata lives in
harness/web_fetch/data/report-methods.json; executable selection and call settings remain in provider configuration. Remove obsolete execution-configsource_urlvalues and put documentation links in the catalog. These links never replace binary/call provenance.For a supported tool version, configure the executable and collect new evidence. A new tool needs catalog metadata and execution configuration; a genuinely new interface still needs adapter code.
harness/web_fetch/README.mddocuments the file-by-file steps, linked from both root READMEs.The earlier evaluator pin update remains a separate commit.
make bump-lexbench REV=<merged-commit>checks ancestry and updates the dependency pin, lock and definition bindings together through the existing shared owner.Expanded numeric/version guards cover resource and shared component modules. Added a recursive catalog guard against unbound “this run”/“本轮” claims, with negative controls. Recorded adapter/runtime-parameter fields retain their measured wording.
Accepted the small task-order loop hoist. No label-wrapper rewrite is needed:
provider_labelalready delegates directly tobrowser_method_label, so different helper names do not establish divergent labels.Deferred replacing the saved log-note translation with a new bilingual evidence field: that would introduce a new input contract while still requiring support for frozen old notes. The existing translation is parameterized by counts, and this change preserves frozen input bytes. Existing variable-count translation tests remain. Broader track extraction and wholesale translation removal require their own caller/evidence audit.
The diagnostic JavaScript collector still uses comma splitting for
srcset; it is separate from native-answer scoring. This PR's compatibility fix does not claim to repair that collector or rewrite its historical diagnostics. No new issue is published automatically from a third-party suggestion.No provider calls, independent result review, report publication or PR merge are performed by this change.
Participant descriptions and tied results
Validation at
48072d19:UV_OFFLINE=1 make cipassed locally: 6,318 Python tests and 2,742 subtests passed (114 skipped), plus lint, UI, native adapters, fixtures and all installed-wheel checks. GitHub CI run 39759791224 passed for this exact commit, including the full test job and Base CLI checks on Python 3.12, 3.13 and 3.14. Optional Claude Code Review was skipped, not counted as a passed review. No merge performed.Tied-metric release checks
The WCXB release gate no longer requires a unique winner to exist. It first validates actual numeric highlights with the shared presentation checker, then tests missing highlights when a winner exists and incorrect highlights on neutral cells, including all-tied comparisons. The bound-interpretation corruption checks no longer demand an optional winner marker; content hashes, measured values and semantic highlight checks remain enforced.
Bilingual generated-report regressions cover all-tied and unique-winner inputs, incorrect highlights, and missing required highlights. Only the Web Fetch checker and tests changed; no historical evaluation data or report was modified.
Validation at
4d1d0397:UV_OFFLINE=1 make cipassed: 6,320 Python tests and 2,742 subtests (114 skipped), naming/lint, UI/native-adapter/fixture checks and all installed-wheel checks. GitHub CI run 39763414055 passed for this exact commit, including the full test job, rendered reference capture and Base CLI on Python 3.12/3.13/3.14. Optional Claude Code Review was skipped, not counted as a passed review. No merge performed.Registered aliases and comparison roles
The new review finding was reproduced with both an additional registered version alias and a renamed baseline participant. WCXB no longer maintains a renderer-only route dictionary or assigns comparison roles by historical participant names. Methodology, provider pages and interface examples use the shared method metadata; registered request examples are explicitly distinguished from recorded routes, and absent route evidence is disclosed.
Build, render and release checks reuse the existing scoring owner
paired_latency_methods, matching the profile binary hashes to certified implementation identities. Missing or ambiguous matches still fail. This preserves current profile/evidence bytes without adding a name-based fallback.Regressions add a registered version to the existing cohort, rename its baseline, and build a three-participant cohort through the public builder with both comparison aliases changed. Both report languages are checked and source evidence stays byte-identical. Changes are limited to Web Fetch code, tests and documentation.
Validation at
887c8a0d:UV_OFFLINE=1 make cipassed locally: 6,323 Python tests and 2,742 subtests (114 skipped), naming/lint, UI/native adapters, fixtures and all installed-wheel checks. GitHub CI run 39775499667 passed on this exact commit, including the full test job, rendered reference capture and Base CLI checks on Python 3.12/3.13/3.14. Optional Claude Code Review was skipped, not counted as a passed review. No historical evaluation data, published reports or current report profiles were modified. No merge performed.