==> Synchronizing chroot copy [/home/alhp/workspace/chroot/root] -> [build_2998e563-56a2-4ebc-8952-789e520e1815]...done ==> Making package: python-frostwork 0.2.2-1.1 (Fri Nov 6 12:43:16 2026) ==> Retrieving sources... -> Cloning frostwork git repo... Cloning into bare repository '/home/alhp/workspace/build/x86-64-v4/python-frostwork-0.2.2-1/frostwork'... -> Found cssselect-1.6.patch ==> Validating source files with sha256sums... frostwork ... Passed cssselect-1.6.patch ... Passed Note: in a future version of systemd-nspawn the default set of permitted socket address families will be restricted to AF_INET, AF_INET6 and AF_UNIX. Use --restrict-address-families= to configure the set of permitted socket address families, or set RestrictAddressFamilies= in a .nspawn file. ==> Making package: python-frostwork 0.2.2-1.1 (Fri Nov 6 11:43:19 2026) ==> Checking runtime dependencies... ==> Installing missing dependencies... resolving dependencies... looking for conflicting packages... Package (1) New Version Net Change extra/python-typing_extensions 4.16.0-1 0.53 MiB Total Installed Size: 0.53 MiB :: Proceed with installation? [Y/n] checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing python-typing_extensions... :: Running post-transaction hooks... (1/1) Arming ConditionNeedsUpdate... ==> Checking buildtime dependencies... ==> Installing missing dependencies... :: There are 2 providers available for cargo: :: Repository extra 1) rust 2) rustup Enter a number (default=1): resolving dependencies... looking for conflicting packages... Package (63) New Version Net Change extra/compiler-rt 23.1.4-1 56.19 MiB core/libedit 20260512_3.1-1 0.27 MiB extra/libgit2 1:1.9.7-1 3.16 MiB extra/libxslt 1.1.45-2 0.78 MiB extra/lld 23.1.4-1 7.58 MiB extra/llhttp 9.3.1-1 0.11 MiB extra/llvm-libs 23.1.4-1 164.88 MiB extra/maturin 1.15.0-1 24.01 MiB extra/perl-error 0.17031-1 0.04 MiB extra/perl-mailtools 2.22-3 0.10 MiB extra/perl-timedate 2.35-1 0.15 MiB extra/python-ast-serialize 0.12.1-1 2.58 MiB extra/python-async-lru 2.4.0-1 0.08 MiB extra/python-certifi 2026.10.23-1 0.02 MiB extra/python-charset-normalizer 3.5.1-1 0.63 MiB extra/python-dateutil 2.9.0-8 1.03 MiB extra/python-filelock 4.0.10-1 1.35 MiB extra/python-frostwork 0.2.2-1 2.15 MiB extra/python-gtin-validator 1.0.3-1 0.03 MiB extra/python-idna 3.20-1 0.68 MiB extra/python-iniconfig 2.3.0-1 0.07 MiB extra/python-itemadapter 0.14.0-1 0.25 MiB extra/python-jinja 1:3.1.6-3 2.04 MiB extra/python-jmespath 1.1.0-1 0.22 MiB extra/python-librt 0.16.0-1 0.55 MiB extra/python-lxml-html-clean 0.4.6-1 0.11 MiB extra/python-markupsafe 3.0.4-1 0.09 MiB extra/python-multidict 7.0.0-1 0.62 MiB extra/python-mypy_extensions 1.1.0-2 0.03 MiB extra/python-orjson 3.13.0-1 0.68 MiB extra/python-packaging 26.3-1 1.58 MiB extra/python-pathspec 1.1.1-1 0.47 MiB extra/python-pluggy 1.7.0-1 0.28 MiB extra/python-pygments 2.21.0-1 15.59 MiB extra/python-pyproject-hooks 1.3.3-1 0.11 MiB extra/python-requests 2.34.2-1 0.76 MiB extra/python-requests-file 2.1.0-3 0.02 MiB extra/python-six 1.17.0-3 0.12 MiB extra/python-stdnum 2.2-1 5.34 MiB extra/python-time-machine 3.5.1-1 0.30 MiB extra/python-tldextract 5.4.0-1 0.49 MiB extra/python-url-matcher 0.6.0-1 0.10 MiB extra/python-urllib3 2.8.0-1 1.48 MiB extra/zlib-ng 2.3.3-1 0.28 MiB extra/git 2.56.0-1 33.54 MiB extra/mypy 2.4.0-1 25.78 MiB extra/python-andi 0.9.0-1 0.15 MiB extra/python-attrs 26.1.0-1 0.63 MiB extra/python-build 1.6.1-1 0.33 MiB extra/python-clear-html 0.5.0-1 0.22 MiB extra/python-cssselect 1.6.0-1 0.30 MiB extra/python-html-text 0.7.1-1 0.04 MiB extra/python-installer 1.1.0-1 0.21 MiB extra/python-lxml 6.1.3_1-1 5.94 MiB extra/python-maturin 1.15.0-1 0.08 MiB extra/python-parsel 1.12.1-1 0.17 MiB extra/python-price-parser 0.5.1-1 0.14 MiB extra/python-pytest 1:9.2.0-1 5.21 MiB extra/python-w3lib 2.6.0-1 0.37 MiB extra/python-web-poet 0.24.1-2 0.59 MiB extra/python-zyte-common-items 0.31.0-1 0.83 MiB extra/python-zyte-parsers 0.6.0-1 0.15 MiB extra/rust 1:1.99.1-1 309.14 MiB Total Installed Size: 681.21 MiB :: Proceed with installation? [Y/n] checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing compiler-rt... installing llhttp... installing libgit2... installing libedit... installing llvm-libs... installing lld... installing rust... Optional dependencies for rust gdb: rust-gdb script [installed] lldb: rust-lldb script installing perl-error... installing perl-timedate... installing perl-mailtools... installing zlib-ng... installing git... Optional dependencies for git git-zsh-completion: upstream zsh completion tk: gitk and git gui openssh: ssh transport and crypto man: show help with `git command --help` perl-libwww: git svn perl-term-readkey: git svn and interactive.singlekey setting perl-io-socket-ssl: git send-email TLS support perl-authen-sasl: git send-email TLS support perl-cgi: gitweb (web interface) support python: git svn & git p4 [installed] subversion: git svn org.freedesktop.secrets: keyring credential helper libsecret: libsecret credential helper [installed] less: the default pager for git installing python-packaging... installing python-pyproject-hooks... installing python-build... Optional dependencies for python-build python-pip: to use as the Python package installer (default) python-uv: to use as the Python package installer python-virtualenv: to use virtualenv for build isolation installing python-installer... installing maturin... installing python-maturin... installing python-ast-serialize... installing python-librt... installing python-mypy_extensions... installing python-orjson... installing python-pathspec... Optional dependencies for python-pathspec python-google-re2: re2 backend installing mypy... Optional dependencies for mypy python-lxml: for reports [pending] python-pip: for installing missing types python-psutil: for dmypy python-setuptools: for mypyc installing python-andi... installing python-attrs... installing libxslt... Optional dependencies for libxslt python: Python bindings [installed] installing python-lxml... Optional dependencies for python-lxml python-beautifulsoup4: support for beautifulsoup parser to parse not well formed HTML python-cssselect: support for cssselect [pending] python-html5lib: support for html5lib parser python-lxml-docs: offline docs python-lxml-html-clean: enable htmlclean feature [pending] installing python-lxml-html-clean... installing python-html-text... installing python-clear-html... installing python-cssselect... installing python-jmespath... installing python-frostwork... Optional dependencies for python-frostwork python-web-poet: web-poet page object integration [pending] installing python-w3lib... installing python-parsel... installing python-price-parser... installing python-iniconfig... installing python-pluggy... installing python-pygments... installing python-pytest... installing python-async-lru... installing python-six... installing python-dateutil... installing python-itemadapter... installing python-multidict... installing python-time-machine... Optional dependencies for python-time-machine python-pytest: for pytest plugin [installed] python-tokenize-rt: for the migration tool installing python-idna... installing python-charset-normalizer... installing python-urllib3... Optional dependencies for python-urllib3 python-brotli: Brotli support python-brotlicffi: Brotli support python-h2: HTTP/2 support python-pysocks: SOCKS support installing python-certifi... installing python-requests... Optional dependencies for python-requests python-chardet: alternative character encoding library python-pysocks: SOCKS proxy support installing python-requests-file... installing python-filelock... installing python-tldextract... installing python-url-matcher... installing python-web-poet... Optional dependencies for python-web-poet python-niquests: HTTP support for the standalone framework python-playwright: browser support for the standalone framework python-pytest: page object testing plugin [installed] installing python-markupsafe... installing python-jinja... Optional dependencies for python-jinja python-babel: for i18n support installing python-gtin-validator... installing python-stdnum... Optional dependencies for python-stdnum python-zeep: SOAP-based online number validation installing python-zyte-parsers... installing python-zyte-common-items... Optional dependencies for python-zyte-common-items scrapy: Scrapy item adapters and pipelines :: Running post-transaction hooks... (1/3) Creating system user accounts... Creating group 'git' with GID 969. Creating user 'git' (git daemon user) with UID 969 and GID 969. (2/3) Reloading system manager configuration... Skipped: Current root is not booted. (3/3) Arming ConditionNeedsUpdate... ==> Retrieving sources... -> Found cssselect-1.6.patch ==> WARNING: Skipping all source file integrity checks. ==> Extracting sources... -> Creating working copy of frostwork git repo... Cloning into 'frostwork'... done. Switched to a new branch 'makepkg' ==> Starting prepare()... patching file tests/test_composition.py patching file tests/test_python.py Updating crates.io index Downloading crates ... Downloaded serde_derive v1.0.229 Downloaded percent-encoding v2.3.2 Downloaded cfg-if v1.0.4 Downloaded yoke-derive v0.8.4 Downloaded pyo3-macros v0.29.0 Downloaded zerofrom v0.1.8 Downloaded idna_adapter v1.2.2 Downloaded heck v0.5.0 Downloaded utf8_iter v1.0.4 Downloaded form_urlencoded v1.2.2 Downloaded stable_deref_trait v1.2.1 Downloaded utf8-width v0.1.8 Downloaded zerofrom-derive v0.1.8 Downloaded potential_utf v0.1.6 Downloaded quote v1.0.46 Downloaded unicode-ident v1.0.24 Downloaded html-escape v0.2.13 Downloaded simdutf8 v0.1.5 Downloaded tinystr v0.8.5 Downloaded synstructure v0.14.0 Downloaded target-lexicon v0.13.5 Downloaded writeable v0.6.4 Downloaded proc-macro2 v1.0.106 Downloaded zerovec-derive v0.11.7 Downloaded smallvec v1.16.3 Downloaded displaydoc v0.2.7 Downloaded litemap v0.8.3 Downloaded pyo3-build-config v0.29.0 Downloaded yoke v0.8.4 Downloaded serde_core v1.0.229 Downloaded once_cell v1.21.4 Downloaded icu_provider v2.4.0 Downloaded chardetng v1.0.0 Downloaded url v2.5.8 Downloaded icu_normalizer_data v2.4.0 Downloaded serde v1.0.229 Downloaded pyo3-macros-backend v0.29.0 Downloaded zerotrie v0.2.5 Downloaded pyo3-ffi v0.29.0 Downloaded memchr v2.8.2 Downloaded icu_locale_core v2.4.0 Downloaded icu_collections v2.4.0 Downloaded zerovec v0.11.9 Downloaded icu_properties v2.4.0 Downloaded idna v1.1.0 Downloaded portable-atomic v1.13.1 Downloaded icu_properties_data v2.4.0 Downloaded syn v3.0.9 Downloaded syn v2.0.118 Downloaded icu_normalizer v2.4.0 Downloaded libc v0.2.186 Downloaded pyo3 v0.29.0 Downloaded encoding_rs v0.8.35 ==> Starting build()... * Getting build dependencies for wheel... * Building wheel... Running `maturin pep517 build-wheel -i /usr/bin/python --frozen --compatibility linux` 🍹 Building a mixed python/rust project 🐍 Found CPython 3.14 at /usr/bin/python 🔗 Found pyo3 bindings with abi3-py3.10 support 📡 Using build options features from pyproject.toml Compiling proc-macro2 v1.0.106 Compiling unicode-ident v1.0.24 Compiling quote v1.0.46 Compiling stable_deref_trait v1.2.1 Compiling target-lexicon v0.13.5 Compiling litemap v0.8.3 Compiling writeable v0.6.4 Compiling utf8_iter v1.0.4 Compiling icu_properties_data v2.4.0 Compiling icu_normalizer_data v2.4.0 Compiling smallvec v1.16.3 Compiling libc v0.2.186 Compiling heck v0.5.0 Compiling percent-encoding v2.3.2 Compiling cfg-if v1.0.4 Compiling once_cell v1.21.4 Compiling utf8-width v0.1.8 Compiling memchr v2.8.2 Compiling simdutf8 v0.1.5 Compiling encoding_rs v0.8.35 Compiling html-escape v0.2.13 Compiling form_urlencoded v1.2.2 Compiling syn v3.0.9 Compiling syn v2.0.118 Compiling chardetng v1.0.0 Compiling pyo3-build-config v0.29.0 Compiling synstructure v0.14.0 Compiling pyo3-macros-backend v0.29.0 Compiling pyo3-ffi v0.29.0 Compiling pyo3 v0.29.0 Compiling zerofrom-derive v0.1.8 Compiling yoke-derive v0.8.4 Compiling zerovec-derive v0.11.7 Compiling displaydoc v0.2.7 Compiling zerofrom v0.1.8 Compiling yoke v0.8.4 Compiling zerovec v0.11.9 Compiling zerotrie v0.2.5 Compiling tinystr v0.8.5 Compiling potential_utf v0.1.6 Compiling icu_collections v2.4.0 Compiling icu_locale_core v2.4.0 Compiling icu_provider v2.4.0 Compiling icu_properties v2.4.0 Compiling icu_normalizer v2.4.0 Compiling idna_adapter v1.2.2 Compiling idna v1.1.0 Compiling url v2.5.8 Compiling pyo3-macros v0.29.0 Compiling frostwork v0.2.2 (/startdir/src/frostwork) Finished `release` profile [optimized] target(s) in 34.58s 📦 Built wheel for abi3 Python ≥ 3.10 to /startdir/src/frostwork/target/wheels/frostwork-0.2.2-cp310-abi3-linux_x86_64.whl /startdir/src/frostwork/target/wheels/frostwork-0.2.2-cp310-abi3-linux_x86_64.whl Successfully built frostwork-0.2.2-cp310-abi3-linux_x86_64.whl ==> Starting check()... Compiling proc-macro2 v1.0.106 Compiling unicode-ident v1.0.24 Compiling quote v1.0.46 Compiling stable_deref_trait v1.2.1 Compiling litemap v0.8.3 Compiling writeable v0.6.4 Compiling icu_normalizer_data v2.4.0 Compiling icu_properties_data v2.4.0 Compiling utf8_iter v1.0.4 Compiling smallvec v1.16.3 Compiling percent-encoding v2.3.2 Compiling cfg-if v1.0.4 Compiling memchr v2.8.2 Compiling utf8-width v0.1.8 Compiling simdutf8 v0.1.5 Compiling encoding_rs v0.8.35 Compiling html-escape v0.2.13 Compiling form_urlencoded v1.2.2 Compiling chardetng v1.0.0 Compiling syn v3.0.9 Compiling synstructure v0.14.0 Compiling zerofrom-derive v0.1.8 Compiling yoke-derive v0.8.4 Compiling zerovec-derive v0.11.7 Compiling displaydoc v0.2.7 Compiling zerofrom v0.1.8 Compiling yoke v0.8.4 Compiling zerovec v0.11.9 Compiling zerotrie v0.2.5 Compiling tinystr v0.8.5 Compiling potential_utf v0.1.6 Compiling icu_collections v2.4.0 Compiling icu_locale_core v2.4.0 Compiling icu_provider v2.4.0 Compiling icu_normalizer v2.4.0 Compiling icu_properties v2.4.0 Compiling idna_adapter v1.2.2 Compiling idna v1.1.0 Compiling url v2.5.8 Compiling frostwork v0.2.2 (/startdir/src/frostwork) Finished `test` profile [unoptimized + debuginfo] target(s) in 27.37s Running unittests src/lib.rs (target/debug/deps/frostwork-da4cddbec8128bd4) running 235 tests test diagnostics::tests::css_categories ... ok test diagnostics::tests::a_declared_syntax_picks_the_taxonomy ... ok test diagnostics::tests::generic_fallbacks_do_not_panic ... ok test diagnostics::tests::comma_group_causes_are_disaggregated ... ok test diagnostics::tests::xpath_categories ... ok test encoding::tests::prescan_requires_meta_tag_context ... ok test encoding::tests::an_undeclared_document_is_autodetected ... ok test encoding::tests::resolve_ignores_charset_in_comment ... ok test encoding::tests::the_tld_is_the_last_label_of_the_host ... ok test encoding::w3lib_oracle_tests::a_body_declaration_counts_only_within_the_floor ... ok test encoding::w3lib_oracle_tests::a_meta_inside_an_attribute_value_declares_nothing ... ok test encoding::w3lib_oracle_tests::an_invalid_charset_does_not_end_the_prescan ... ok test encoding::w3lib_oracle_tests::bomless_utf16_is_detected_from_the_xml_prefix ... ok test encoding::w3lib_oracle_tests::declares_nothing_must_not_switch_encoding ... ok test encoding::w3lib_oracle_tests::established_prescan_behaviour_holds ... ok test encoding::w3lib_oracle_tests::meta_x_user_defined_means_windows_1252 ... ok test encoding::w3lib_oracle_tests::raw_text_content_is_not_markup ... ok test encoding::w3lib_oracle_tests::the_iso_8859_1_label_is_windows_1252 ... ok test encoding::w3lib_oracle_tests::the_unbounded_scan_matches_only_real_meta_tags ... ok test encoding::w3lib_oracle_tests::utf32_boms_are_not_recognized ... ok test encoding::w3lib_oracle_tests::valid_declarations_must_be_found ... ok test encoding::w3lib_oracle_tests::xml_declaration_is_a_charset_declaration ... ok test implied_close::tests::arms_without_generator_coverage ... ok test implied_close::tests::end_tag_scope_is_a_priority_comparison ... ok test implied_close::tests::rule_table ... ok test matcher::attr_gate_tests::admits_everything_the_exact_comparison_would_match ... ok test matcher::deferred_state_tests::string_equality_streams_across_chunks ... ok test matcher::matching::seg_match_tests::child_run_needs_block_placement ... ok test matcher::attr_gate_tests::collisions_cost_a_comparison_and_not_an_answer ... ok test matcher::matching::seg_match_tests::deep_nest_is_not_exponential ... ok test encoding::w3lib_oracle_tests::a_head_declaration_is_honoured_at_any_depth ... ok test matcher::matching::sig_filter_tests::case_sensitivity_mirrors_the_predicates ... ok test matcher::matching::sig_filter_tests::req_covers_only_positive_identity ... ok test matcher::matching::sig_filter_tests::class_tokenizer_is_shared_with_the_signature ... ok test matcher::navigation::tests::navigation_browser_table_foreign_content ... ok test matcher::navigation::tests::options_select_what_is_reported ... ok test matcher::navigation::tests::what_the_skipped_scan_could_miss_still_counts ... ok test matcher::navigation::tests::navigation_browser_table_self_closed_text ... ok test matcher::navigation::tests::a_relative_document_url_resolves_only_absolute_urls ... ok test matcher::navigation::tests::a_tag_name_joined_by_nul_deletion_still_counts ... ok test matcher::sig_wants_tests::a_deferred_tail_carries_its_own_wants ... ok test matcher::sig_wants_tests::grouped_tier_is_walked ... ok test matcher::sig_wants_tests::per_kind_flags_cover_every_compound_that_asks ... ok test matcher::open_elem_size::stays_small_enough_to_push_cheaply ... ok test page::tests::cardinality_views ... ok test page::tests::compiled_page_reuses_plan_across_pages ... ok test page::tests::explicit_encoding_label ... ok test matcher::deferred_state_tests::string_contains_state_is_bounded_and_cross_chunk ... ok test matcher::sig_wants_tests::wants_is_live_exactly_when_some_compound_requires_bits ... ok test matcher::navigation::tests::rides_the_same_pass_as_the_fields ... ok test page::tests::get_is_cardinality_independent ... ok test page::tests::iter_preserves_declaration_order ... ok test page::tests::join_empty_is_empty_string ... ok test page::tests::missing_field_and_no_match ... ok test page::tests::page_caches_plan_and_builder_invalidates_it ... ok test matcher::navigation::tests::navigation_browser_table_base ... ok test matcher::matching::sig_filter_tests::filter_never_rejects_a_match ... ok test matcher::navigation::tests::delay_is_whole_seconds ... ok test matcher::tail_merge_tests::an_over_budget_tail_never_shares_a_live_sub_schema ... ok test matcher::tail_merge_tests::tails_sharing_a_prefix_merge_without_changing_values ... ok test matcher::navigation::tests::base_query_uses_the_document_encoding ... ok test page::tests::all_first_fields_stop_the_scan_and_keep_the_same_values ... ok test page::tests::an_outer_html_first_field_stops_only_once_no_capture_is_open ... ok test matcher::navigation::tests::refresh_query_is_utf8 ... ok test matcher::tail_merge_tests::text_predicate_and_reverse_tails_merge_on_their_own_prefixes ... ok test page::tests::reusable_across_pages ... ok test page::tests::single_pass_fills_every_field ... ok test page::tests::to_json_escapes_control_and_quotes ... ok test page::tests::to_json_join_field_is_a_string ... ok test page::tests::to_json_shapes_and_escaping ... ok test page::tests::xpath_and_css_fields_mix ... ok test selector::support_boundary_tests::css_escapes_in_quoted_values_are_decoded ... ok test selector::support_boundary_tests::css_escapes_in_the_attr_argument_are_decoded ... ok test selector::support_boundary_tests::invalid_css_identifiers_are_rejected ... ok test selector::support_boundary_tests::quoted_delimiters_inside_functional_pseudos_are_data ... ok test selector::tests::a_bare_terminal_after_an_explicit_combinator_is_the_universal_spelling ... ok test selector::tests::anpb_microsyntax ... ok test selector::tests::contains_pseudo_lowers_to_the_text_predicate ... ok test selector::tests::has_pseudo_parses_or_rejects ... ok test page::tests::get_all_follows_cardinality_across_schemas ... ok test selector::tests::is_where_pseudo_parses_or_rejects ... ok test selector::tests::positional_pseudos_parse_or_reject ... ok test selector::tests::unquoted_attr_value_must_be_a_css_ident ... ok test tests::a_declared_syntax_overrides_prefix_routing ... ok test tests::a_doctype_does_not_break_a_text_node ... ok test tests::a_frame_end_tag_is_never_out_ranked ... ok test tests::a_page_whose_first_tag_is_a_frame_part_still_gets_an_html ... ok test tests::a_frameset_document_has_no_body ... ok test tests::a_stray_equals_before_an_attribute_name_does_not_eat_the_next_attribute ... ok test tests::a_self_closed_redundant_frame_tag_closes_its_enclosing_element ... ok test tests::a_start_tag_cut_off_by_eof_is_dropped ... ok test tests::adjacent_broken_by_intervening_element ... ok test tests::a_written_body_is_redundant_only_while_one_is_open ... ok test tests::adjacent_sibling ... ok test tests::a_tag_name_ends_only_at_whitespace_slash_or_gt ... ok test tests::attr_crlf_normalized_like_text ... ok test tests::attr_eq_predicate ... ok test tests::attr_operators ... ok test tests::attr_self ... ok test tests::attribute_case_insensitive_flag ... ok test tests::audit_schema_reports_support_and_budget ... ok test tests::bom_stripped_only_at_document_start ... ok test tests::budget_usage_counts_members_and_sibling_bits ... ok test tests::class_and_id ... ok test tests::comma_group_attr_same_name ... ok test tests::colgroup_closed_by_sections_and_rows ... ok test tests::class_lists_split_on_ascii_whitespace_only ... ok test tests::comma_group_mixed_terminal ... ok test tests::comma_group_multi_name_attr ... ok test tests::comma_group_outer_mixed_with_value_unsupported ... ok test tests::budget_members_over_128_is_safe_empty ... ok test tests::comma_group_text ... ok test tests::comma_group_mixing_a_deferred_member_merges_in_document_order ... ok test tests::budget_sibling_bits_over_64_is_safe_empty ... ok test tests::comment_breaks_text_and_is_skipped ... ok test tests::content_after_close_html_is_kept ... ok test tests::content_after_the_document_closes_gets_a_second_root ... ok test tests::document_frame_tags_close_head_and_are_otherwise_ignored ... ok test tests::dot_child_anchor_is_unsupported_not_wrong ... ok test tests::document_roots_share_sibling_triggers ... ok test tests::dropped_end_tag_text_predicates ... ok test tests::dropped_end_tag_does_not_split_text ... ok test tests::dt_dd_child_omitted_end ... ok test tests::dt_dd_same_tag_repeat_nests ... ok test tests::empty_selector_is_unsupported_not_universal ... ok test encoding::tests::autodetection_reads_the_whole_document ... ok test matcher::navigation::tests::many_unclosed_meta_tags_take_linear_time ... ok test matcher::navigation::tests::navigation_browser_table_refresh ... ok test matcher::navigation::tests::navigation_browser_table_several_refreshes ... ok test tests::encoding_iso_2022_jp_is_transcoded_not_byte_scanned ... ok test tests::descendant_robust ... ok test tests::encoding_legacy_and_sniff ... ok test tests::encoding_non_ascii_attribute_names_are_decoded_before_comparison ... ok test tests::encoding_utf16_bom_transcode ... ok test tests::deferred_predicate_subtree_and_descendant_values ... ok test tests::end_tag_does_not_unwind_a_div_scope_boundary ... ok test tests::deferred_tails_exclude_the_deferred_element ... ok test tests::end_tag_does_not_unwind_a_higher_priority_element ... ok test tests::end_tag_does_not_unwind_a_table ... ok test tests::end_tag_open_only_starts_a_tag_on_a_letter ... ok test tests::entity_decode_text ... ok test tests::general_sibling ... ok test tests::grouped_audit_uses_matcher_routes ... ok test tests::grouped_multi_member_css_is_rejected_whole ... ok test tests::has_takes_a_selector_list ... ok test tests::lt_not_a_tag_is_text ... ok test tests::many_basic_per_container_grouping ... ok test tests::deferred_entries_share_the_128_member_budget ... ok test tests::iframe_noembed_xmp_content_is_raw_text ... ok test tests::many_descendant_or_self_scope ... ok test tests::many_empty_container_still_a_row ... ok test tests::many_flat_and_grouped_together ... ok test tests::indented_bom_is_still_the_document_bom ... ok test tests::many_nested_same_group_routes_to_all_open_instances ... ok test tests::li_child_omitted_end ... ok test tests::many_outer_html_subfield ... ok test tests::no_global_desync_sentinel ... ok test tests::minimized_html4_boolean_attr_uses_its_name_as_value ... ok test tests::noframes_content_is_raw_text ... ok test tests::nested_table_blocks_an_outer_table_family_end_tag ... ok test tests::nonsubject_sibling_predicate_case_b ... ok test tests::non_head_content_ends_the_head_and_opens_the_body ... ok test tests::normalize_space_values ... ok test tests::not_pseudo ... ok test tests::nul_is_deleted_after_the_ends_are_trimmed ... ok test tests::not_takes_a_selector_list ... ok test tests::only_the_head_names_open_a_head ... ok test tests::option_child_omitted_end ... ok test tests::outer_html_bare_element ... ok test tests::outer_html_normalizes_newlines_like_the_input_stream ... ok test tests::outer_html_omitted_end_tag_is_raw ... ok test tests::p_closed_by_block ... ok test tests::plaintext_swallows_the_rest_of_the_document ... ok test tests::raw_nul_in_utf16_is_deleted_after_transcoding ... ok test tests::positional_values ... ok test tests::raw_nul_is_deleted_before_tokenizing_not_just_from_values ... ok test tests::rawtext_lt_inside_script ... ok test tests::real_nodes_still_split_text ... ok test tests::unicode_identifiers ... ok test tests::universal_after_combinator_is_self_scoped ... ok test tests::relative_descendant_excludes_context_node ... ok test tests::universal_with_detached_terminal_is_subtree_scoped ... ok test tests::void_attr ... ok test tests::vertical_tab_is_stripped_like_python_does ... ok test tests::wellformed_child_unchanged ... ok test tests::wellformed_nested_lists ... ok test tests::xpath_node_and_implied_close ... ok test tests::xpath_downward ... ok test tokenizer::tests::attribute_parsing_forms ... ok test tests::reverse_positional_values ... ok test tests::xpath_union_or_and_descendant_attr_values ... ok test tokenizer::tests::comment_close_boundary_no_desync ... ok test tests::ruby_annotations_never_auto_close ... ok test tokenizer::tests::comments_and_cdata_emit_no_tokens ... ok test tokenizer::tests::end_tag_attributes_are_scanned_then_discarded ... ok test tests::script_double_escaped_content_does_not_desync ... ok test tokenizer::tests::end_tag_open_only_starts_a_tag_on_a_letter ... ok test tests::selector_node_identity_pins_a_name_and_reports_the_frame_risk ... ok test tokenizer::tests::entities_left_raw_for_the_matcher ... ok test tests::selector_terminals_names_the_value_terminal ... ok test tokenizer::tests::lt_not_a_tag_is_text ... ok test tests::sibling_base_with_descendant ... ok test tokenizer::tests::plaintext_runs_to_end_of_file_with_no_end_tag ... ok test tokenizer::tests::rawtext_end_tag_attributes_are_scanned_too ... ok test tokenizer::tests::rawtext_keeps_markup_as_text ... ok test tests::sibling_chain ... ok test tokenizer::tests::script_double_escaped_end_tag_does_not_close_outer_script ... ok test xpath::support_boundary_tests::expressions_lxml_rejects_are_unsupported ... ok test tests::sibling_on_omitted_end_matches_lxml ... ok test xpath::tests::absolute_single_slash_anchors_to_html_root ... ok test tests::sibling_then_descendant_step ... ok test xpath::tests::following_sibling_unsupported_shapes_reject ... ok test xpath::tests::following_sibling_lowers_to_general_combinator ... ok test xpath::tests::non_ascii_attribute_names_compile_and_non_ascii_tags_do_not ... ok test tests::start_close_names_missing_from_the_hand_written_port ... ok test xpath::tests::positional_predicate_compiles ... ok test xpath::tests::relative_child_anchor_rejected_descendant_kept ... ok test xpath::tests::supported_forms_compile ... ok test xpath::tests::text_content_predicates_parse_or_reject ... ok test xpath::tests::unions_or_and_descendant_attr_supported ... ok test xpath::tests::unsupported_forms_reject ... ok test xpath::tests::uppercase_names_reject_matching_libxml2_lowercasing ... ok test tests::start_close_pairs_match_libxml2 ... ok test xpath::tests::upward_axes_reframe_as_has ... ok test xpath::tests::variable_refs_and_unquoted_operands_reject ... ok test tests::subtree_text ... ok test tests::td_tr_child_omitted_end ... ok test tests::the_document_frame_is_synthesized_when_the_page_omits_it ... ok test tests::trailing_whitespace_is_not_a_text_node ... ok test tests::two_different_ids_match_nothing_but_dont_poison_group ... ok test tests::uncommon_void_elements_hold_no_children ... ok test tests::live_members_never_exceed_the_shared_budget ... ok test xpath::tests::normalize_space_wraps_inner_terminal ... ok test selector::tests::deeply_nested_is_declines_without_overflow ... ok test matcher::matching::seg_match_tests::equivalent_to_reference_exhaustively ... ok test result: ok. 235 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.27s Running unittests src/bin/bench.rs (target/debug/deps/bench-47d9b3c4f8e4af52) running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running unittests src/bin/differ.rs (target/debug/deps/differ-21fa8c9991618980) running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests frostwork running 1 test test src/page.rs - page (line 10) ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s Compiling stable_deref_trait v1.2.1 Compiling litemap v0.8.3 Compiling writeable v0.6.4 Compiling utf8_iter v1.0.4 Compiling smallvec v1.16.3 Compiling percent-encoding v2.3.2 Compiling cfg-if v1.0.4 Compiling utf8-width v0.1.8 Compiling memchr v2.8.2 Compiling simdutf8 v0.1.5 Compiling icu_normalizer_data v2.4.0 Compiling icu_properties_data v2.4.0 Compiling zerofrom v0.1.8 Compiling encoding_rs v0.8.35 Compiling html-escape v0.2.13 Compiling yoke v0.8.4 Compiling form_urlencoded v1.2.2 Compiling zerovec v0.11.9 Compiling zerotrie v0.2.5 Compiling tinystr v0.8.5 Compiling potential_utf v0.1.6 Compiling icu_collections v2.4.0 Compiling icu_locale_core v2.4.0 Compiling chardetng v1.0.0 Compiling icu_provider v2.4.0 Compiling icu_properties v2.4.0 Compiling icu_normalizer v2.4.0 Compiling idna_adapter v1.2.2 Compiling idna v1.1.0 Compiling url v2.5.8 Compiling frostwork v0.2.2 (/startdir/src/frostwork) Finished `release` profile [optimized] target(s) in 19.45s ============================= test session starts ============================== platform linux -- Python 3.14.9, pytest-9.2.0, pluggy-1.7.0 rootdir: /startdir/src/frostwork configfile: pyproject.toml testpaths: tests plugins: time-machine-3.5.1, web-poet-0.24.1 collected 733 items tests/test_audit_context.py ..................... [ 2%] tests/test_composition.py .............................................. [ 9%] ............................. [ 13%] tests/test_doc_examples.py ....... [ 14%] tests/test_docs_check.py .... [ 14%] tests/test_encoding.py ................................................. [ 21%] ........................................................................ [ 31%] ...................... [ 34%] tests/test_gates.py ..................FF......................... [ 40%] tests/test_make_gates.py ............. [ 42%] tests/test_migration.py .......................... [ 45%] tests/test_navigation.py ........... [ 47%] tests/test_python.py ................................................... [ 54%] ........................................................................ [ 63%] ........................................................................ [ 73%] ........................................................................ [ 83%] ............................................... [ 89%] tests/test_release.py ........... [ 91%] tests/test_schema.py ............................................... [ 97%] tests/test_typing.py ... [ 98%] tests/test_validation.py ............. [100%] =================================== FAILURES =================================== ________________ test_the_browser_difference_list_is_two_sided _________________ def test_the_browser_difference_list_is_two_sided(): """w3lib is the oracle for the SHARED encoding cases, not the target. The intended policy is browser/WHATWG correctness, so where w3lib and browsers disagree the gate has to assert the difference rather than report it as a mismatch — otherwise the only way to keep the target green is to reproduce w3lib's bugs. Two things make that list honest, and both are checked here: it exists as an enumerated table, and each row asserts w3lib's side TOO, so a difference that gets fixed upstream fails as STALE instead of quietly becoming a hole. The "does the gate exit nonzero" half is `test_encoding_gate_exits_nonzero_on_mismatch`; this test owns the "is the w3lib column still true" half, spot-checked on one row. """ frostwork = pytest.importorskip("frostwork") html_to_unicode = pytest.importorskip("w3lib.encoding").html_to_unicode parsel = pytest.importorskip("parsel") src = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "tools", "enc_check.py")).read() assert "BROWSER_DIFFERENCES" in src, "the encoding gate must enumerate its browser differences" assert "is STALE" in src, "each row must also assert w3lib's side, or a fixed row becomes a hole" doc = (b'' b'

caf\xe9

') _, txt = html_to_unicode(None, doc, auto_detect_fun=None, default_encoding="utf8") > assert parsel.Selector(text=txt).css("p.c::text").getall() != ["café"], \ "w3lib now honours a after — that row of the list is stale" E AssertionError: w3lib now honours a after — that row of the list is stale E assert ['café'] != ['café'] E + where ['café'] = getall() E + where getall = [].getall E + where [] = css('p.c::text') E + where css = .css E + where = (text='

café

') E + where = .Selector tests/test_gates.py:266: AssertionError _______________ test_the_decoder_sweep_is_exhaustive_not_sampled _______________ def test_the_decoder_sweep_is_exhaustive_not_sampled(): """A gate that SAMPLES must not be read as a gate that proves. This one did. It checked 800 assigned characters per legacy label, found nothing, and the contract then said shift_jis / euc-jp / euc-kr / gb18030 were "at full parity on validly encoded text". They are not: a crawled EUC-JP wiki containing the byte pair A1 C1 — the JIS wave dash, U+FF5E to WHATWG and every browser, U+301C to Python's `euc_jp` — walked straight through it. 800 samples out of ~6,900 assigned sequences is a 12% chance of catching any one of them, and a green run reads exactly like a proof. So the sweep now enumerates every assigned two-byte sequence for every label, and this test owns the "it did not quietly go back to sampling" half: the table must name all five labels, and the witness row must still be true on BOTH sides (as with the browser-difference list, a row that gets fixed upstream has to fail as stale rather than become a hole). """ frostwork = pytest.importorskip("frostwork") html_to_unicode = pytest.importorskip("w3lib.encoding").html_to_unicode parsel = pytest.importorskip("parsel") import decoder_sweep as D # ---- the ENUMERATION. Its failure mode is narrowing, so pin the boundaries, not a count. cand = D.candidates() assert len(cand) == len(D.LEAD) * len(D.TRAIL) == 24066 assert min(s[0] for s in cand) == 0x81 and max(s[0] for s in cand) == 0xFE assert min(s[1] for s in cand) == 0x40 and max(s[1] for s in cand) == 0xFE # no candidate can carry a byte that would break the `

…

` wrapper, which is a # property of the ranges themselves — a filter for it would be dead code below 0x40 assert not [s for s in cand if any(b in D.MARKUP_BYTES for b in s)] # it must not be a function of any PYTHON CODEC: filtering on what `euc_jp` calls assigned is exactly # how the WHATWG-only class stayed invisible. Both witnesses have to be in it. assert b"\xad\xa1" in cand, "AD A1 (the `①` euc_jp has no mapping for) must be swept" assert b"\xa1\xc1" in cand, "A1 C1 (the crawled wave dash) must be swept" assert D.LABELS == ("big5", "euc-jp", "gb18030", "euc-kr", "shift_jis"), \ "a label with no row is not evidence of parity" # ---- the CLASSIFIER. Every class must be reachable and none may swallow another. (The private-use # characters are written as escapes on purpose: a literal one is invisible in a source file.) pua, fffd = "\ue794", "\ufffd" assert D.classify("x", "x") == "agree" assert D.classify("\uff5e", "\u301c") == "real" # index divergence: the wave dash assert D.classify(fffd, pua) == "pua" # Parsel private-use, WHATWG nothing at all assert D.classify(fffd + "\uff89", pua + "\uff89") == "pua" # ...position-wise, mid-string assert D.classify("\u2460", fffd) == "whatwg_only" # AD A1's class: WHATWG has it, Python does not assert D.classify(fffd, fffd * 2) == "replacement_shape" # a real character opposite a PUA one is NOT the pua class — that would hide a mapping difference assert D.classify("\u3000", pua) == "real" # ---- the VERDICT. Each class must be able to go red, in both directions. label = "euc-jp" clean = dict(D.INDEX_DIVERGENCE[label]) counts = D.expected_counts(label) assert D.verify(label, clean, counts) == [], "the recorded state must be clean" assert D.verify(label, {**clean, b"\xff\xff": ("a", "b")}, counts), "a NEW pair must fail" assert D.verify(label, {}, counts), "a pair that stops diverging must fail as stale" assert D.verify(label, {**clean, b"\xa1\xc1": ("x", "y")}, counts), \ "a pair that maps differently must fail" # the three BULK classes are gated by count, so each needs a label where it is actually populated — # zeroing a class that is already zero proves nothing, and every class must be reachable somewhere for kind in D.BULK: where = [lab for lab in D.LABELS if D.expected_counts(lab)[kind]] assert where, f"no label populates the {kind} class — it is gated by a count of nothing" for lab in where: want = D.expected_counts(lab) assert D.verify(lab, D.INDEX_DIVERGENCE[lab], want) == [], lab assert D.verify(lab, D.INDEX_DIVERGENCE[lab], {**want, kind: want[kind] + 1}), \ f"a drift in {lab}'s {kind} count must fail" assert D.verify(lab, D.INDEX_DIVERGENCE[lab], {**want, kind: 0}), \ f"{lab}'s {kind} class emptying must fail too — silence is not parity" # ---- and the two real-page witnesses, both sides, so a row cannot rot into a silent agreement. The # AD A1 row is the load-bearing one: Parsel gets U+FFFD PER BYTE for a character `euc_jp` has no # mapping for, which is why enumerating over "what Python calls assigned" could never have seen it. for seq, theirs, mine in ((b"\xa1\xc1", "〜", "~"), (b"\xad\xa1", "��", "①")): doc = (b'

' + seq + b"

") _, txt = html_to_unicode(None, doc, auto_detect_fun=None, default_encoding="utf8") > assert parsel.Selector(text=txt).css("p.c::text").getall() == [theirs], \ f"Parsel now decodes euc-jp {seq.hex()} differently — that row is stale" E AssertionError: Parsel now decodes euc-jp a1c1 differently — that row is stale E assert ['~'] == ['〜'] E E At index 0 diff: '~' != '〜' E Use -v to get more diff tests/test_gates.py:348: AssertionError =============================== warnings summary =============================== tests/test_doc_examples.py: 13 warnings tests/test_python.py: 46 warnings /usr/lib/python3.14/site-packages/web_poet/page_inputs/http.py:222: DeprecationWarning: The default_encoding and auto_detect_fun parameters of w3lib.encoding.html_to_unicode() are deprecated. body_encoding, text = html_to_unicode( tests/test_gates.py::test_meta_prescan_matches_w3lib tests/test_gates.py::test_meta_prescan_matches_w3lib tests/test_gates.py::test_meta_prescan_matches_w3lib tests/test_gates.py::test_meta_prescan_matches_w3lib tests/test_gates.py::test_meta_prescan_matches_w3lib tests/test_gates.py::test_meta_prescan_matches_w3lib tests/test_gates.py::test_meta_prescan_matches_w3lib tests/test_gates.py::test_meta_prescan_matches_w3lib tests/test_gates.py::test_meta_prescan_matches_w3lib /startdir/src/frostwork/tests/test_gates.py:237: DeprecationWarning: The default_encoding and auto_detect_fun parameters of w3lib.encoding.html_to_unicode() are deprecated. _, txt = html_to_unicode(None, doc, auto_detect_fun=None, default_encoding="utf8") tests/test_gates.py::test_the_browser_difference_list_is_two_sided /startdir/src/frostwork/tests/test_gates.py:265: DeprecationWarning: The default_encoding and auto_detect_fun parameters of w3lib.encoding.html_to_unicode() are deprecated. _, txt = html_to_unicode(None, doc, auto_detect_fun=None, default_encoding="utf8") tests/test_gates.py::test_the_decoder_sweep_is_exhaustive_not_sampled /startdir/src/frostwork/tests/test_gates.py:347: DeprecationWarning: The default_encoding and auto_detect_fun parameters of w3lib.encoding.html_to_unicode() are deprecated. _, txt = html_to_unicode(None, doc, auto_detect_fun=None, default_encoding="utf8") -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED tests/test_gates.py::test_the_browser_difference_list_is_two_sided - A... FAILED tests/test_gates.py::test_the_decoder_sweep_is_exhaustive_not_sampled ================= 2 failed, 731 passed, 70 warnings in 15.45s ================== ==> ERROR: A failure occurred in check(). Aborting... ==> ERROR: Build failed, check /home/alhp/workspace/chroot/build_2998e563-56a2-4ebc-8952-789e520e1815/build