Repository navigation
#29 co-core 0.32.0: XML and feed extractors, refusals as goldens - #51
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pin moves 0.19.7 → 0.32.0 (processor_version 0.32.0+1; LOCAL_GENERATION
stays 1). The lock moves only co-core, co-core-aio and co-core-sync.
gen_parity_goldens.py records a spec co-core refuses (UnsupportedExtractionError,
cannobserv#523) as {"refused": ...}; any other raise still names its case.
Bump note, regenerated co-core-direct on 0.32.0: 16 moved, all added; none of
the 13 existing goldens moved.
feed_atom, feed_no_items, feed_rss, feed_rss_rss_essence, xml_document,
xml_xpath: added
refused_css_on_csv, refused_css_on_pdf, refused_css_on_xml,
refused_empty_xpath, refused_invalid_xpath, refused_jsonpath, refused_regex,
refused_unknown_algorithm, refused_xpath_on_csv, refused_xpath_on_html: added
feed_rss is co-core's own pinned digest (sha256:78e28497…). The real corpus
passes unchanged, 9/9.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… the bump procedure Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ump note Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ogress Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t tag Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #29. (
Refs, notCloses: Watcher's acknowledgement on watcher#366, the deploy and the live gate come after the merge.)Plan:
docs/plans/2026-10-12-29-co-core-0.32.0.md. It was reviewed before implementation, and every proposed case was run through 0.32.0's chain.What changes
processor_versionbecomes0.32.0+1;LOCAL_GENERATIONstays 1 (ask 2). The lock moves only co-core, co-core-aio and co-core-sync: no dependency of theirs changes.XmlExtractor. A spec co-core can't honour raisesUnsupportedExtractionError. That error propagates, the child reports itraised, and the handler publishesextraction_error, terminal (spec §4).gen_parity_goldens.pyrecords a refused case as{"refused": "UnsupportedExtractionError"}. It catches that error alone: a parse failure, which is a plainValueError, still names its case and writes nothing.text/xmland underapplication/rss+xml;empty), a generic XML document, and anxpathon XML;extraction_config_from_specand each extractor.The catch-up reading (0.19.7 → 0.32.0)
I checked these with
git diffbetween the tags, not only the CHANGELOG:streams.pychanged in comments only), the stores,canonical_text,spec_fingerprint, and thecontent.process/content.derivedmodels (achanges.pydocstring aside).resolve_dispatch_essence:.xml,.rssand.atomnow map to the XML essences. Processor never re-resolves the essence, so whichever side moves first, a URL like that behind an ambiguous header stays on the HTML path, as it is today. Coordination is on watcher#366.Bump note
Regenerated co-core-direct on 0.32.0: 16 moved, all added. None of the 13 existing goldens moved.
feed_rss=sha256:78e284978faf41fbe8ccd8dc06e6d2803d9788097fca633486dfbbbdc024be09. That is co-core's hand-pinned digest for the same fixture, and a test now holds it.text/html+css).requiredcontainment (Landlock ABI 6): the XML extractor stays inside the allowlist, and every refusal comes backraised.Verification
uv run pytest: 650 passed, 14 skipped. Every skip is a secret that isn't readable here.uv run pytest -m integration: 56 passed.ruff check,ruff format --checkanduv lock --lockedare clean.Review
Two rounds of review, with each fix in its own
CR Ncommit:build_wheelhouse.sh's default tag to the pin. CR 4 adds a test that the generator lists a case moving between a digest and a refusal (cannobserv#557 will move one). CR 5 names each layer's refusals in the coverage test, instead of counting them.Watcher coordination
Posted on watcher#366: the notice, with the new
processor_version, the bump note and why either order is safe, and a correction:xpathon PDF / CSV is refused too.After merge
scripts/deploy.sh.complete. The first command from each must complete, and noextraction_errormay carryUnsupportedExtractionError. If either fails, roll back.🤖 Generated with Claude Code