Adapter plugins
Milestone P now starts with a typed AdapterPlugin contract: a versioned
AdapterManifest, an immutable AdapterRequest and an extraction projection.
Explicitly register trusted installed plugins with DEFAULT_ADAPTERS.register;
they are reachable through Runtime.extract without adding another Core branch.
The registry can inspect and enable/disable adapters. Nothing is downloaded or
installed during an operation. Malformed projections and unexpected exceptions
become typed schema failures without exporting raw exception text.
Existing adapters (including RSS search parsing) are registered compatibility plugins. Their implementation branches remain inside the legacy parser pending migration. Registration is currently in-process; entry-point/config discovery, provider/search/hook/backend contracts, policy selection and route memory are still pending. This registry does not grant credentials, account access or wider identity authority.
The live registry canary passed exact Grays/Lloyds galleries and two-page Cash Converters/ALLBIDS pagination through HTTP/router arms (eight observations). This does not establish all-site reliability or release readiness.
Disabled adapters now fail before acquisition or cache reuse, after the existing
identity-resolution checks. Receipts expose the registered adapter version;
cache keys include it so plugins with different declared versions cannot reuse
one another’s projections. Compatibility adapters currently declare legacy;
automatic versioning of those implementations remains part of their migration.
Tests verify that disabling a previously successful adapter causes zero further
transport calls, even when cached content exists. The focused two-page canary
passed all four HTTP/router observations after the preflight change.
The eBay item adapter validates indexed carousel counters, resource identity and agreement across duplicate carousel views. A matching canonical item URL and product-gallery prefix bind the carousel to the requested listing; the carousel may extend truncated product metadata. Saved evidence reconstructed four and eight photos for two exact items, including an eight-photo carousel whose product metadata listed only five. This is declared page completeness, not independent gallery truth or a fresh live canary.
The eBay adapter now records an exact-item Buy It Now page-control claim when the canonical URL and purchase-control item parameter agree. Enabled/disabled state is retained, but purchase URLs are not exported. This is observable page evidence; availability remains unknown and asking price remains separate from confirmed sale price. It does not establish live/sold/ended ground truth.
eBay completed/sold search redirected to sign-in during a 2026-10-02 state
reference probe. The adapter now reports AUTH_REQUIRED for the exact eBay
sign-in endpoint, and default public fallback stops. The corrected live receipt
is saved in AU_EBAY_COMPLETED_STATE_AUTH_CANARY.json. An enrolled identity
is needed for that reference route; no completed-listing state was verified.
Visible live-item controls remain page claims, not independent state truth.
ALLBIDS exposes location_state from aucState (for example NSW); the legacy
state field remains the same geographical value. Neither field describes auction
availability. Conditional SOLD templates and a past close-time claim do not prove
that a lot sold: availability stays unknown and transaction price stays unset
until current listing state is verified.
ALLBIDS detail evidence also preserves populated, consistent text from the exact
closingCountdownText() status widget as rendered_status_text_claim. Empty,
unresolved or conflicting widgets provide no claim. This preserves page evidence. Version 3 can classify ended under the corroboration
rules below; version 4 also recognizes live under the rules below. No status implies a confirmed sale price.
The 2026-10-02 ALLBIDS rendered field audit matches one exact lot’s title,
AUD 23 current bid, NSW location, countdown and 11-photo page counter against
retained screenshot pixels. A second fresh extraction decoded all 11 declared
photos. The page visibly offers BID NOW; no bid was submitted. This validates
those displayed fields for that observation, not closed/sold coverage or
longitudinal site reliability. See AU_ALLBIDS_RENDERED_FIELD_AUDIT.json.
The versioned allbids_update plugin reads the site’s anonymous polling endpoint
/Search/getCurrentAuctionUpdate?aucID=ID¤tBid=0®ID=0. It requires a
matching exact lot ID, a complete changed response, a finite current bid and
explicitly zoned source/close clocks. Its projection omits account and bidder
history fields and reports public update claims with unknown availability.
Nonzero account IDs are rejected by this anonymous endpoint adapter. This adds
fresh state evidence; it does not establish sold or transaction-price truth.
ALLBIDS listing adapter version 2 supports both current and archived gallery
hosts through WebPolicy.allbids_gallery_hosts. The default tuple contains
images-live.allbids.com.au and images-archive.allbids.com.au; callers can replace
it, supply an empty tuple to reject all gallery hosts, or set None to remove the
host restriction. HTTPS and credential-free URL checks still apply. Adapter
requests now carry the operation policy; benchmark JSON normalizes this tuple.
A fresh historical lot canary decoded its one archived photo and extracted
Closed, confirmed against screenshot pixels. The page requires sign-in to see
the auction result, so a closing status does not establish sale price or sold
state. See AU_ALLBIDS_ARCHIVE_REPAIR_CANARY.json.
ALLBIDS listing adapter version 3 reports availability=ended only for an
acquisition marked rendered with a consistent exact Closed widget, timezone-aware
source and close clocks showing the deadline passed, and no pause or withdrawal
claim. Evidence records rendered_status_and_source_clocks; plain HTML, deadlines
alone, malformed clocks and contradictory conditions remain unknown. Closed does
not mean sold; transaction price remains unset. The exact historical reference
was visually checked against retained screenshot pixels before being added to
the benchmark.
Version 4 additionally recognizes live when a rendered numeric countdown,
one enabled exact placeBidForm / bidNow control, and timezone-aware opening,
source and closing clocks agree that bidding has opened and has not closed.
Hidden or disabled controls, pause/withdrawal claims, flash-buy completion,
unrendered content and inconsistent clocks remain unknown. Evidence records
rendered_countdown_bid_control_and_source_clocks. Live describes the auction,
not account permission to bid; no bid is submitted during validation.
Cash Converters listing adapter version 2 recognizes live only when rendered
content binds the exact product ID to consistently enabled Add to cart controls
and the matching product offer claims InStock. At least one control must lack
explicit hidden markers; disabled, contradictory or unrendered evidence stays
unknown. Evidence records rendered_item_purchase_control_and_stock_claim.
The camera reference was visually checked against a fresh screenshot showing
its title, AUD 75 asking price and Add to cart. No cart action or purchase is
performed; asking price remains distinct from transaction price.
ALLBIDS listing adapter version 5 ignores status widgets carrying explicit hidden markers, including hidden ancestors, before live/ended classification. Hidden Closed templates cannot establish ended status.
eBay listing adapter version 2 recognizes live from rendered evidence only when
the canonical exact item, item-bound Buy It Now control and matching InStock offer
agree. The control must be enabled and lack explicit hidden markers, including
hidden ancestors. Metadata or unrendered controls alone leave availability
unknown. Evidence records rendered_exact_item_purchase_control_and_stock_claim.
The fresh reference screenshot shows the exact lens, AUD 1,499 asking price and
Buy It Now. No purchase is attempted, and transaction price remains unset.
Completed-listing authentication remains an enrolled-identity workload.