{"block_close_oss.c33fd1fe9c":"Community and ecosystem","core-extras.96d330537a":"Base IR","core-extras.bee831a169":"Substrate","core-extras.61a0822826":"Apps on Core","core-extras.15438cc098":"not supported","core-extras.ad565d9d01":"Feature","core-extras.0155bf03e5":"Segment legend","core-extras.8b7110078e":"Algorithm groups by data type","core-extras.25ab4276a6":"Scrollable capability matrix","open-source-winnow.technicalLedgerDelivery":"Delivery","open-source-winnow.technicalLedgerDeliveryValue":"CLI, crate, service, or WASM","open-source-winnow.businessLedgerPurpose":"Purpose","open-source-winnow.businessLedgerPurposeValue":"Recurring source collection","open-source-winnow.businessLedgerInputs":"Inputs","open-source-winnow.businessLedgerInputsValue":"Search, sites, APIs, feeds, files","open-source-winnow.businessLedgerReplaces":"Replaces","open-source-winnow.businessLedgerReplacesValue":"Five drifting collection paths","open-source-winnow.businessLedgerOperation":"Operation","open-source-winnow.businessLedgerOperationValue":"One policy and one run record","open-source-winnow.businessLedgerOutput":"Output","open-source-winnow.businessLedgerOutputValue":"Typed results for the next system","open-source-winnow.businessLedgerControls":"Controls","open-source-winnow.businessLedgerControlsValue":"Source rules enforced across the route","open-source-winnow.businessLedgerDeployment":"Deployment","open-source-winnow.businessLedgerDeploymentValue":"Your servers, EU region, or isolated","open-source-winnow.specSurfaceValue":"4","open-source-winnow.specSurfaceLabel":"Integration surfaces","open-source-winnow.specSurfaceCaption":"CLI, Rust crate, service, and WebAssembly","open-source-winnow.95d1be11af":"Knowledge governance over Winnow-collected sources.","open-source-winnow.4a86080d67":"Spindle","open-source-winnow.fe0a091fdb":"Products","open-source-winnow.1e6f9f4abc":"Index gathered data for fast retrieval.","open-source-winnow.c91597c8b9":"BitWeave","open-source-winnow.6cc3364a24":"Related project","open-source-winnow.50e668157e":"Parse Winnow output into content-addressed trees.","open-source-winnow.188fb5d6cf":"Reed","open-source-winnow.d5d6e83bf2":"Continue exploring","open-source-winnow.75e393a1ac":"Explore the project","open-source-winnow.f9743247fa":"Read the documentation","open-source-winnow.ef0fd4ccef":"Trace the collection route","open-source-winnow.0597b125b7":"Start with one recurring question. Winnow turns it into a named route with explicit sources, shared fetch rules, typed output, and a run record the next system can inspect.","open-source-winnow.0d32b562d0":"The source is not the centre. The question is","open-source-winnow.90e40d5043":"Get started","open-source-winnow.ac4bbe17fe":"Winnow","open-source-winnow.650fabe787":"Open source","open-source-winnow.a772158be0":"Winnow / Collection route","open-source-winnow.1d0ec533c9":"Publishes in round eight","open-source-winnow.9000d0e2a6":"Source-aware by design","open-source-winnow.a9618738d7":"text, JSON, JSONL, CSV, HTML.","open-source-winnow.6677bdd8d5":"Output formats","open-source-winnow.2d5a61fe0d":"Across 66 categories. Plus 28 engines, 325 collectors.","open-source-winnow.f042372fde":"Site scrapers","open-source-winnow.4b8726f3ae":"Core has no runtime deps. Stealth browser is optional, Python.","open-source-winnow.66639f7d45":"Binary","open-source-winnow.19675ee12c":"40 MB","open-source-winnow.e0c97bd053":"What ships","open-source-winnow.c185cb047c":"PROJECT STATS","open-source-winnow.8123fea150":"5 OUTPUT FORMATS","open-source-winnow.e6c25f92c5":"1,325 SCRAPERS","open-source-winnow.2353b465ed":"The project sheet records what ships: a compact Rust binary, the scraper and collector catalogue, output formats, request controls, language bindings, and the four integration surfaces used by the rest of the stack.","open-source-winnow.4ffe329686":"Polite and auditable","open-source-winnow.1dc0a20dc5":"One compact release","open-source-winnow.fca77b7e3a":"One run, measured","open-source-winnow.0cf002555f":"No external service required","open-source-winnow.6a51d6151a":"CLI, crate, service, and WASM","open-source-winnow.bd1f8d68f7":"TLS, cookies, rate limits, proxies","open-source-winnow.7d0906ee25":"HTTP + stealth","open-source-winnow.674f9c26ae":"Parser, scrapers, fetch, audit","open-source-winnow.eb7cd63fcb":"Winnow engine","open-source-winnow.813ff70d15":"Browser, edge, Python via PyO3","open-source-winnow.4e946026a7":"WASM","open-source-winnow.046fa05e5a":"axum HTTP API, distributed","open-source-winnow.329cb8b6ba":"Service","open-source-winnow.5d21d61124":"Embed dweve-winnow-core","open-source-winnow.2180b3e7ce":"Crate","open-source-winnow.8b3ca3b909":"winnow scrape, search, crawl","open-source-winnow.b7a391a49f":"Where Winnow plugs in","open-source-winnow.07a56cd0db":"INTEGRATION GRAPH","open-source-winnow.5f5cdfd63a":"SERVICE","open-source-winnow.803a250cd3":"CRATE","open-source-winnow.d05fb01e0b":"BINARY","open-source-winnow.53ff5c8869":"Run Winnow as a single binary, embed it as Rust crates, run it as an axum HTTP service, or build for the browser and edge. The same scrapers and the same output shape work in all four modes.","open-source-winnow.7e16a145f0":"Crate. Service. WASM","open-source-winnow.de0c4301ca":"Binary","open-source-winnow.899e5920ef":"One question, four surfaces","open-source-winnow.87b02f00c3":"Same output shape","open-source-winnow.f8497f2219":"Add custom scrapers","open-source-winnow.4fc6e7f740":"Native","open-source-winnow.d85fc8a070":"Collectors","open-source-winnow.bce0641417":"Search","open-source-winnow.7f5d63aa39":"Engines","open-source-winnow.34c808d0a6":"News","open-source-winnow.7058849d4f":"ML","open-source-winnow.d2d0663714":"Science","open-source-winnow.5c9cb498f5":"Government","open-source-winnow.39960c1919":"Top categories","open-source-winnow.9f95b0efcb":"Pre-built scraper coverage","open-source-winnow.9bcb1e6ede":"SOURCE CENSUS","open-source-winnow.a62a7a3d23":"SEARCH","open-source-winnow.951b9ecfa1":"OPEN DATA","open-source-winnow.f37b9e1aa4":"FINANCE","open-source-winnow.9f621eb5fd":"NEWS","open-source-winnow.b61263161a":"SCIENCE","open-source-winnow.4c914641d3":"GOVERNMENT","open-source-winnow.2683338b83":"Pre-built scrapers for the sources analysts already use, from government and science portals to news, finance, and open data. Each scraper is a typed Rust struct. Custom scrapers drop in beside the built-ins and follow the same output contract.","open-source-winnow.7c7017f188":"66 categories. 28 engines","open-source-winnow.6e8c1d6ad1":"1,325 scrapers","open-source-winnow.70e78129b8":"Source catalogue","open-source-winnow.a3c756d658":"Operator decides lawful basis","open-source-winnow.12cafee013":"Honest by construction","open-source-winnow.a28319fb89":"Per-request: source, URL, timestamp, status, content hash.","open-source-winnow.3cfc5f1cc9":"Audit log","open-source-winnow.58c3ece30d":"Private network ranges blocked in every URL input.","open-source-winnow.8ad110e1e0":"SSRF protection","open-source-winnow.223ef3573a":"Per-domain token buckets matched to each source documented policy.","open-source-winnow.8ba9b8ac40":"Rate limits","open-source-winnow.0bd110efa7":"Deny by default. Uncached domains are refused until robots.txt is fetched.","open-source-winnow.a99c742c91":"What ships by default","open-source-winnow.f11e84d825":"BUILT-IN POSTURE","open-source-winnow.3db5c14ab0":"AUDIT LOG","open-source-winnow.b8ca5c71f2":"SSRF PROTECTION","open-source-winnow.d5ee7df3c2":"RATE LIMITS","open-source-winnow.5236187a5c":"Winnow enforces robots.txt with a deny-by-default policy, per-domain rate limits, SSRF protection, GDPR pseudonymization, and per-request audit logging as design constraints, not optional settings. What falls outside Winnow's control: the operator's lawful basis for collecting data, data minimisation choices, and downstream retention decisions. This page does not claim GDPR certification because a library cannot make that determination on your behalf.","open-source-winnow.8acc3469d0":"Honest about what it does","open-source-winnow.f148950ed8":"Polite. Logged","open-source-winnow.1a9051b25f":"Compliance posture","open-source-winnow.1a499aaf64":"Audit-logged always","open-source-winnow.e2b4bcecf8":"text, JSON, JSONL, CSV, or HTML. Pipe-friendly.","open-source-winnow.4bed336194":"Output","open-source-winnow.90161c0f0f":"CSS selectors extract typed fields from the DOM.","open-source-winnow.b7e45a36ff":"Parse","open-source-winnow.57bae8b92d":"Plain HTTP first, then stealth HTTP, then a browser only if blocked.","open-source-winnow.d48aafe689":"Fetch","open-source-winnow.4c4fbc0b99":"28 search engines queried in parallel, results merged and ranked.","open-source-winnow.3b3290c7fa":"Discovery","open-source-winnow.6c58c3c08d":"Query to records","open-source-winnow.e0647adaff":"PIPELINE","open-source-winnow.feb3522a40":"OUTPUT","open-source-winnow.da04370db0":"PARSE","open-source-winnow.a721f50a7a":"FETCH","open-source-winnow.45087ff64d":"DISCOVERY","open-source-winnow.27606cee9d":"One query becomes structured records through four stages. Discovery queries 28 engines in parallel. Fetch escalates from plain HTTP to TLS-fingerprinted requests to a stealth browser, only when a site actively blocks. Parse runs typed scrapers over the DOM. Output writes one of five formats to stdout.","open-source-winnow.bf72445a97":"Fetch. Parse. Output","open-source-winnow.1b43ac4dfb":"Discovery","open-source-winnow.b040b4179b":"Architecture","open-source-winnow.1c5d129e8d":"Output is inconsistent","open-source-winnow.e439b21bd5":"Glue dominates","open-source-winnow.fdda8d29bb":"x N APIs","open-source-winnow.60cfc363df":"Each search engine has its own API, quotas, and wrapper.","open-source-winnow.d7850d50b3":"x billing","open-source-winnow.335f5fb4d6":"Rotation services add separate billing and IP-quality variance.","open-source-winnow.9db0b745b6":"Proxies","open-source-winnow.0901b4221d":"x 1 fleet","open-source-winnow.67fb452c54":"Selenium or Playwright adds a separate ops surface and resource cost.","open-source-winnow.6e92074d83":"Browsers","open-source-winnow.2326fac36d":"x N sites","open-source-winnow.6cbfe909dd":"Per-site brittle code that breaks silently when markup changes.","open-source-winnow.7d90748c8b":"Scrapers","open-source-winnow.da03189786":"Where the cost lives","open-source-winnow.6144c12669":"STACK SPRAWL","open-source-winnow.4a4570af16":"GLUE","open-source-winnow.ac668e6540":"PROXY","open-source-winnow.97df859a3e":"BROWSER","open-source-winnow.41877a3bdf":"SCRAPER","open-source-winnow.8ba443e70b":"Most data gathering stacks combine scrapers, headless browsers, proxy services, search wrappers, and custom maintenance scripts. The glue layer becomes the project. Each tool has its own ops surface, its own billing model, and its own politeness assumptions.","open-source-winnow.270333e787":"should not take five tools","open-source-winnow.cf9318a136":"Collecting web data","open-source-winnow.8a9400005c":"The outside world is not a database","open-source-winnow.5e6380b8bc":"No false certification","open-source-winnow.2cb81f45c7":"Default-on safety","open-source-winnow.a958cb78f4":"Lawful basis, minimisation, and retention stay with you. Winnow records that decision; it does not make it for you.","open-source-winnow.0706363016":"Your decisions","open-source-winnow.69f2d18088":"Every request is logged with source, address, time, and result.","open-source-winnow.b88a3623ab":"Full audit record","open-source-winnow.b6bfbf3c69":"Identifiers can be pseudonymised as data is gathered, not carried through raw.","open-source-winnow.b8ac03697d":"Personal data","open-source-winnow.582f017916":"Robots policy and per-domain rate limits are enforced from the first request.","open-source-winnow.bdc3a2e089":"Politeness rules","open-source-winnow.d1d450cb18":"On by default","open-source-winnow.77ab22c822":"POSTURE AT A GLANCE","open-source-winnow.e2ee39bcca":"EU RESIDENCY","open-source-winnow.19baf504f7":"AUDIT RECORD","open-source-winnow.b4c70a9a8b":"SAFE ADDRESSES","open-source-winnow.318767df73":"PERSONAL DATA","open-source-winnow.3f83a254a7":"BLOCKING","open-source-winnow.cad4a73ce0":"Gathering web data carries real risks: getting blocked, handling personal data, requests reaching unsafe addresses, and having no record of what happened. Winnow handles each of these from the start, with politeness rules, pseudonymisation, protection against unsafe destinations, and a per-request log. What it does not do is pretend to make your legal decisions. Your lawful basis, how much you keep, and how long you keep it stay your call, and we make no certification claim a library cannot honestly make.","open-source-winnow.fa0aca198e":"Honest about the rest","open-source-winnow.1dcc66b673":"Careful by default","open-source-winnow.311a8d642c":"Risk and compliance","open-source-winnow.a4fb8cc38d":"One policy and one run record","open-source-winnow.7466a2ae10":"One route","open-source-winnow.c8c41b72d7":"Folding the stack into one binary means one thing to learn, run, and patch, instead of five plus their seams.","open-source-winnow.c51d4489d5":"One thing to run","open-source-winnow.1bf3e18b84":"Brittle per-site scrapers and the glue scripts that hold the stack together quietly consume engineer time month after month.","open-source-winnow.9eeb7771e5":"Maintenance time","open-source-winnow.ca70fb57eb":"Proxy rotation and search quotas are billed by use. A self-hosted binary on infrastructure you already pay for has no surprise traffic bill.","open-source-winnow.cd49b7c50d":"Per-traffic services","open-source-winnow.9a52706df6":"Five layers, one route","open-source-winnow.0f068df912":"WHAT COORDINATES","open-source-winnow.f648fee8d5":"SEARCH QUOTAS","open-source-winnow.6f4082243c":"PROXIES","open-source-winnow.83de2cfdb2":"BROWSER FLEET","open-source-winnow.3eb882375e":"SCRAPERS","open-source-winnow.0899c8f507":"A collection stack usually fragments across site-specific scrapers, browser automation, proxy handling, search connectors, and glue code. Winnow coordinates those moving parts under one run policy, so operations can patch one route, observe one record, and repeat one question.","open-source-winnow.f132e65cc6":"become one maintained route","open-source-winnow.85ed5bf94d":"Five moving parts","open-source-winnow.f821931802":"Operational load","open-source-winnow.f600b9e709":"One recorded run","open-source-winnow.ccb9f1391c":"Four controls","open-source-winnow.57d456f952":"Inputs, timing, decisions, and results remain available for repetition and review.","open-source-winnow.7446a936b1":"Run record","open-source-winnow.a9e0704776":"Parsing, pseudonymisation, normalisation, and output rules are explicit.","open-source-winnow.4b470daf9b":"Data handling","open-source-winnow.9358f9e1f1":"Rate limits, robots policy, retries, and unsafe-address protection travel with the route.","open-source-winnow.a2d79c3f61":"Fetch policy","open-source-winnow.088deeb1f6":"Every search engine, site, API, feed, and file is named in the run.","open-source-winnow.d0fb61ca87":"Source scope","open-source-winnow.15f854e070":"Four controls in one run","open-source-winnow.d954112db6":"CONTROL POINTS","open-source-winnow.1f7637ae95":"RUN RECORD","open-source-winnow.492c0dbda6":"FETCH POLICY","open-source-winnow.a3f4fd93d8":"SOURCE SCOPE","open-source-winnow.a2cd53a4d3":"A recurring collection job should not behave like five unrelated scripts. Winnow gives discovery, fetching, parsing, normalisation, output, and the run record one shared route, while deployment remains a separate operational choice.","open-source-winnow.1710860816":"the same governed path","open-source-winnow.b56d141828":"Different sources enter","open-source-winnow.072f3a916c":"Collection architecture","open-source-winnow.a4a30cb334":"Route and results out","open-source-winnow.35a0ab3b85":"Question in","open-source-winnow.bdaeca762a":"Emit JSON, CSV, streams, stored records, or the response shape your workflow expects.","open-source-winnow.6e0bb577e9":"Output modes","open-source-winnow.89fe292571":"Discover, fetch, parse, and output share one policy and one run record.","open-source-winnow.e0c084380d":"Pipeline stages","open-source-winnow.61420faa65":"Search engines, websites, APIs, feeds, and files can enter the same run.","open-source-winnow.a9243f87cf":"Source types","open-source-winnow.13622bee2b":"From input to output","open-source-winnow.e2614ce8d1":"ROUTE SHAPE","open-source-winnow.95e38dad9e":"TYPED OUTPUTS","open-source-winnow.3115880727":"4 PIPELINE STAGES","open-source-winnow.c968638a6e":"5 SOURCE TYPES","open-source-winnow.4701584e0f":"Winnow starts with a question, decides which source surfaces belong in the run, discovers candidates, fetches them politely, parses the useful material, and emits typed results. The route is recorded so the same work can be repeated and reviewed.","open-source-winnow.96127f5c14":"a recorded collection route","open-source-winnow.3d1e7bdec2":"One question becomes","open-source-winnow.801d28dda8":"How it works","open-source-winnow.6de81701a2":"Source-linked results","open-source-winnow.ef5ace74b5":"Safe by default","open-source-winnow.0fb11c4315":"It writes down what it visited, so the answer is already there if anyone asks.","open-source-winnow.0299390921":"Keeps a record","open-source-winnow.dd899d754b":"It can run entirely inside Europe, on machines you trust.","open-source-winnow.862044aac9":"Stays home","open-source-winnow.fd08e020e2":"It follows the rules every website sets and waits its turn.","open-source-winnow.759c6a3670":"Stays polite","open-source-winnow.fb4961b61d":"Each result keeps its source notes and collection route, so the service can show where the information came from.","open-source-winnow.d6a91c5d42":"No black box","open-source-winnow.b872ad641b":"Plain and honest","open-source-winnow.148420e6dc":"WHY IT IS DIFFERENT","open-source-winnow.33906a7dfd":"OPEN","open-source-winnow.b0b7ba4666":"PRIVATE","open-source-winnow.ad2877d54b":"POLITE","open-source-winnow.a1c1aba507":"The first questions are sensible ones: could this cause trouble, where does my information go, and how can I see what it did? Here are the plain answers. Care and openness are built into Winnow from the start, not sold as extras.","open-source-winnow.b8fa13a138":"and nothing hidden","open-source-winnow.00379fff72":"Polite, private,","open-source-winnow.18bc032372":"Is it safe to use","open-source-winnow.d9f3692497":"Keep it","open-source-winnow.90b1fdef30":"Read it","open-source-winnow.eb04de10b2":"The list is a small file you can save and come back to, not something that disappears.","open-source-winnow.dd3a4f7c0f":"It does not vanish","open-source-winnow.74bb8e8a6a":"Each line says where it came from, so you can always look at the source yourself.","open-source-winnow.c9b83270d4":"You can check it","open-source-winnow.e2ffc2c247":"The clutter is cleared away. You see the useful parts you asked for and where each one came from.","open-source-winnow.5b1c5f4d93":"Nothing to untangle","open-source-winnow.1bd762bd1c":"Plain and tidy","open-source-winnow.35119bfa57":"WHY THE ANSWER IS EASY","open-source-winnow.d8ddbc8b42":"YOURS TO KEEP","open-source-winnow.f09b80e155":"WITH SOURCES","open-source-winnow.d50a7cd631":"ONE LINE EACH","open-source-winnow.4135994c85":"Instead of a pile of websites to read, you get one clear list with a line for each item and a note showing where it came from. Read it, print it, or keep it. It turns a tangle of open tabs into a record you can check later.","open-source-winnow.89300de58b":"not a heap of pages","open-source-winnow.abc7c8c290":"A neat list,","open-source-winnow.1251cc0dd7":"What comes back","open-source-winnow.07c371e345":"No jargon needed","open-source-winnow.50080947a0":"Ask like a person","open-source-winnow.a6cb163400":"Each card shows the exact sort of thing you would say, so you are never stuck.","open-source-winnow.daee884cec":"See an example","open-source-winnow.25c4e7dcc9":"There are no menus or settings to wrestle with. You just ask.","open-source-winnow.3264d976ab":"No buttons to hunt","open-source-winnow.c91a36563e":"Describe what you want in your own everyday words, like talking to a person.","open-source-winnow.aca89cba00":"Say it plainly","open-source-winnow.4e3f2a8062":"No special words","open-source-winnow.08613d4939":"HOW THE ASKING FEELS","open-source-winnow.adea7e3ebb":"ANSWERS","open-source-winnow.098fa67dec":"TIMES","open-source-winnow.1ef12a9d81":"NOTICES","open-source-winnow.a6c130e9e5":"PRICES","open-source-winnow.cca5fbbb81":"You do not need special words. Ask for news on a subject, prices from a few shops, an official notice, or the times of an event. Choose an example to see how you might ask and what kind of organised answer can come back.","open-source-winnow.2eb6be1dbf":"asked the way you talk","open-source-winnow.2cc7eb5087":"Little everyday jobs,","open-source-winnow.d4062ec2bc":"What you can ask","open-source-winnow.8be100fbe3":"No computer skills","open-source-winnow.c80e161083":"No setup","open-source-winnow.e7dc530cb3":"A neat list comes back, the way a tidy receipt lists what you bought.","open-source-winnow.29cc70a6ac":"You receive","open-source-winnow.e5ec456f61":"It visits the pages and reads them for you, politely.","open-source-winnow.8470202743":"It goes out","open-source-winnow.8d5643b32d":"Tell it what you are looking for, in everyday words.","open-source-winnow.7ed149da71":"You ask","open-source-winnow.a0ad93c540":"Three easy steps","open-source-winnow.f0a2ec1e4b":"HOW IT FEELS TO USE","open-source-winnow.9b640c766b":"YOU RECEIVE","open-source-winnow.e491f98c13":"IT FETCHES","open-source-winnow.51138d4247":"ASK","open-source-winnow.111bedc7cd":"The web is enormous and much of it is noise. Winnow reads the relevant pages, keeps the useful parts, and leaves the clutter behind. You ask in plain words and get an organised answer with its sources. There is nothing new to learn.","open-source-winnow.a7e0f3da53":"so you do not have to","open-source-winnow.77e260ae55":"It fetches facts","open-source-winnow.fd8d2a5359":"What is this thing","open-source-winnow.f5c44d70c8":"Runs inside Europe, you control it","open-source-winnow.e03947cc0c":"Sovereignty","open-source-winnow.f460d0c338":"Source rules and safety built in","open-source-winnow.5a8f23f567":"Risk","open-source-winnow.08e51a95ac":"Fewer recurring bills to manage","open-source-winnow.5697fd85ad":"Subscriptions","open-source-winnow.a47248ec69":"None, you run it yourself","open-source-winnow.bf5dde2d06":"Lock-in","open-source-winnow.14bba97aa2":"Five separate tools and their glue","open-source-winnow.1697458e97":"Replaces","open-source-winnow.2f37d72f7f":"Self-hosted source work you own","open-source-winnow.f8c94a3b4b":"What it is","open-source-winnow.7f4a84d235":"Winnow gives recurring source work one governed route. Search engines, websites, APIs, feeds, and files enter the same run; discovery, fetching, parsing, and typed output share one policy and one record. Operations gains a repeatable process instead of five collectors that drift apart.","open-source-winnow.605e19124f":" not five subscriptions.","open-source-winnow.c44c8f84d1":"into a repeatable collection run","open-source-winnow.520bfc8181":"Turn one question","open-source-winnow.566ddd5375":"Winnow","open-source-winnow.a74c151fb2":"Every result keeps its source trail","open-source-winnow.cf9b77061f":"Open","open-source-winnow.77787c7f49":"Can stay inside Europe","open-source-winnow.9525ae1781":"Safe","open-source-winnow.71fb014688":"Follows every website rule","open-source-winnow.439f048194":"Polite","open-source-winnow.29daf762bf":"A neat list, ready to read","open-source-winnow.53eb1352da":"You get","open-source-winnow.e225fd00a8":"Reads the web, tidies the answer","open-source-winnow.b017742a89":"It does","open-source-winnow.a8d67e1bf6":"Ask in plain words","open-source-winnow.3b4c6041c7":"You do","open-source-winnow.45557686dd":"An assistant that gathers facts for you","open-source-winnow.704869f20f":"In plain words","open-source-winnow.f7b38f0719":"See how it works","open-source-winnow.c5187e41af":"When Fabric needs current information, Winnow gathers the relevant pieces from the sources chosen for the service and returns a tidy result with its sources attached. You do not configure scrapers or write code; Winnow works underneath and keeps a record of how the information was gathered.","open-source-winnow.09822b8237":" the facts back to you","open-source-winnow.308a33b7e9":"An assistant that brings","open-source-winnow.e55d544b7a":"robots.txt, rate limits, SSRF protection by design","open-source-winnow.8a123b3f50":"Compliance approach","open-source-winnow.dcb1528b65":"text, JSON, JSONL, CSV, HTML","open-source-winnow.0155f01d8e":"40 MB single binary, Rust","open-source-winnow.a2d36e938f":"1,325 site scrapers, 28 search engines, 325 collectors","open-source-winnow.2eb56be3c2":"Sources","open-source-winnow.a84a3235f0":"Scrapy, Selenium, proxies, custom scripts","open-source-winnow.20b7770944":"Questions that run","open-source-winnow.942587e61e":"Project sheet","open-source-winnow.2040a14fac":"Winnow compiles a question, target, or watch condition into a repeatable collection route. Discovery spans search engines and the scraper catalogue; fetching escalates from HTTP to browser automation; parsing normalises the result into typed text, JSON, JSONL, CSV, or HTML. Every request passes the shared rate, robots, SSRF, and audit controls.","open-source-winnow.253484a36c":" graph","open-source-winnow.dfcb0bb64a":" into a source","open-source-winnow.0ad84ab58c":"A question compiles","open-source-winnow.48febbef47":"5","open-source-winnow.2a246cca87":"4","open-source-winnow.21b111cbfe":"5","open-source-winnow.1dabba21cd":"✓","open-source-winnow.40311e4206":"Metered","open-source-winnow.a906200976":"Ongoing","open-source-winnow.d88f6d8372":"Once","open-source-winnow.1f444cd5d5":"○","open-source-winnow.870b1fc137":"robots.txt","open-source-winnow.0368680abd":"default-on","open-source-winnow.9cdc6c47aa":"always","open-source-winnow.699f1a05a9":"SIMPLE","open-source-winnow.27e88b861f":"EASY","open-source-winnow.7696d02e75":"TIDY","open-source-winnow.ad7d12bf1c":"GOOD TO KNOW","open-source-winnow.80db3832a5":"PIPELINE","open-source-winnow.4acc8a696c":"ROUTE","open-source-winnow.acda47627f":"OPERATIONS","open-source-winnow.c9766ca413":"GOVERNANCE","open-source-winnow.5d0b2f6bd4":"OBSERVED","open-source-winnow.8215b59ccb":"ENGINE","open-source-winnow.b338255a3c":"BY DESIGN","open-source-winnow.75e7a212dc":"BUILT-IN","open-source-winnow.6e10953f3e":"OPEN","open-source-winnow.c26c3c60bf":"SAFETY POSTURE","open-source-winnow.5b8fc02b51":"What an evaluator checks","open-source-winnow.ed2c603813":"Politeness","open-source-winnow.2916f241b5":"Deny by default, parsed before every fetch.","open-source-winnow.a70f6d7596":"Safe targets","open-source-winnow.d014bc43ef":"Internal and private addresses blocked.","open-source-winnow.9fedecd7a5":"Pseudonymised at the point of capture.","open-source-winnow.33de865a8d":"Audit trail","open-source-winnow.567a04e87e":"Logged","open-source-winnow.b4d33125f6":"Every request recorded and exportable.","open-source-winnow.fee3fb2936":"scrapers","open-source-winnow.50b9e78177":"categories","open-source-winnow.153946c740":"BUILD PROFILE","open-source-winnow.63bae1ca6e":"How one release reaches each surface","open-source-winnow.9b8dfdff73":"RELEASE","open-source-winnow.ac1a42f5ac":"Platforms","open-source-winnow.e473f43629":"Linux, macOS and Windows.","open-source-winnow.967382f860":"Bindings","open-source-winnow.7f1585f93e":"Rust crate, Python via PyO3, and WASM.","open-source-winnow.ca2769fc96":"Core runtime dependencies","open-source-winnow.c15fda7a62":"The core ships with no runtime dependencies.","open-source-winnow.b2344990cb":"One release, several surfaces","open-source-winnow.36b1413724":"Fragmented collection stack","open-source-winnow.68ef2be51a":"Five moving parts","open-source-winnow.b0dc0f5a2e":"Governed collection route","open-source-winnow.d700a7568c":"One run record","open-source-winnow.235fd89e60":"Search quotas","open-source-winnow.58dd06369e":"Glue scripts","open-source-winnow.d0173a08de":"Deployment stays your choice","open-source-winnow.hero.eyebrow":"Winnow","open-source-winnow.hero.title.lead":"Winnow.","open-source-winnow.hero.title.accent":"Questions that run.","open-source-winnow.hero.action.secondary":"Ask about the release","open-source-winnow.hero.technical.lede":"Winnow is an open-source, self-hosted source-intelligence runtime in Rust under the Apache-2.0 license. A question compiles into a typed source graph: discovery across 28 search engines, 1,325 maintained scrapers and 325 native collectors, under one durable question contract.","open-source-winnow.hero.technical.action.primary":"Follow one run","open-source-winnow.hero.technical.ledger.label":"Project sheet","open-source-winnow.hero.technical.ledger.pill":"Winnow","open-source-winnow.hero.technical.ledger.row.whatItIs.label":"What it is","open-source-winnow.hero.technical.ledger.row.whatItIs.value":"Source intelligence runtime in Rust","open-source-winnow.hero.technical.ledger.row.sources.label":"Sources","open-source-winnow.hero.technical.ledger.row.sources.value":"1,325 site scrapers, 28 search engines, 325 collectors","open-source-winnow.hero.technical.ledger.row.binary.label":"Binary","open-source-winnow.hero.technical.ledger.row.binary.value":"40 MB single binary, Rust","open-source-winnow.hero.technical.ledger.row.output.label":"Output","open-source-winnow.hero.technical.ledger.row.output.value":"text, JSON, JSONL, CSV, HTML","open-source-winnow.hero.technical.ledger.row.replaces.label":"Replaces","open-source-winnow.hero.technical.ledger.row.replaces.value":"Browser fleets, proxy pools, scripts and glue","open-source-winnow.hero.technical.ledger.row.delivery.label":"Delivery","open-source-winnow.hero.technical.ledger.row.delivery.value":"CLI (winnow search), crates, service, Python or WASM","open-source-winnow.hero.technical.ledger.row.controls.label":"Controls","open-source-winnow.hero.technical.ledger.row.controls.value":"Rate limits, source rules and safe-address protection","open-source-winnow.hero.business.lede":"Winnow is an open-source Apache-2.0 web-scraping and OSINT engine in Rust. The same external questions return every quarter and the method behind the answer disappears every time; Winnow turns each question into an owned source process with typed results and a run record the next person can inspect.","open-source-winnow.hero.business.action.primary":"Start with one question","open-source-winnow.hero.business.ledger.label":"How it works","open-source-winnow.hero.business.ledger.pill":"Winnow","open-source-winnow.hero.business.ledger.row.purpose.label":"Purpose","open-source-winnow.hero.business.ledger.row.purpose.value":"Recurring source collection","open-source-winnow.hero.business.ledger.row.inputs.label":"Inputs","open-source-winnow.hero.business.ledger.row.inputs.value":"Search, sites, APIs, feeds, files","open-source-winnow.hero.business.ledger.row.replaces.label":"Replaces","open-source-winnow.hero.business.ledger.row.replaces.value":"Five drifting collection paths","open-source-winnow.hero.business.ledger.row.operation.label":"Operation","open-source-winnow.hero.business.ledger.row.operation.value":"One policy and one run record","open-source-winnow.hero.business.ledger.row.output.label":"Output","open-source-winnow.hero.business.ledger.row.output.value":"Typed results for the next system","open-source-winnow.hero.business.ledger.row.controls.label":"Controls","open-source-winnow.hero.business.ledger.row.controls.value":"Source rules enforced across the route","open-source-winnow.hero.business.ledger.row.deployment.label":"Deployment","open-source-winnow.hero.business.ledger.row.deployment.value":"Your servers, operator-controlled or isolated","open-source-winnow.hero.consumer.lede":"You ask what you need. Winnow looks across suitable public sources, brings back the useful parts and shows where each one came from. When the world changes, the question can look again.","open-source-winnow.hero.consumer.action.primary":"See what it does","open-source-winnow.hero.consumer.ledger.label":"In plain words","open-source-winnow.hero.consumer.ledger.pill":"Winnow","open-source-winnow.hero.consumer.ledger.row.whatItIs.label":"What it is","open-source-winnow.hero.consumer.ledger.row.whatItIs.value":"An assistant that gathers facts for you","open-source-winnow.hero.consumer.ledger.row.youDo.label":"You do","open-source-winnow.hero.consumer.ledger.row.youDo.value":"Ask in plain words","open-source-winnow.hero.consumer.ledger.row.itDoes.label":"It does","open-source-winnow.hero.consumer.ledger.row.itDoes.value":"Reads the web, tidies the answer","open-source-winnow.hero.consumer.ledger.row.youGet.label":"You get","open-source-winnow.hero.consumer.ledger.row.youGet.value":"A neat list, ready to read","open-source-winnow.hero.consumer.ledger.row.polite.label":"Polite","open-source-winnow.hero.consumer.ledger.row.polite.value":"Waits its turn and keeps a record","open-source-winnow.hero.consumer.ledger.row.safe.label":"Safe","open-source-winnow.hero.consumer.ledger.row.safe.value":"Runs where you deploy it","open-source-winnow.hero.consumer.ledger.row.open.label":"Open","open-source-winnow.hero.consumer.ledger.row.open.value":"Every result keeps its source trail","open-source-winnow.breadcrumb.home":"Open Source","open-source-winnow.breadcrumb.current":"Winnow","open-source-winnow.close.label":"Get started","open-source-winnow.close.headline":"Choose one question that keeps coming back. Make it run.","open-source-winnow.close.body":"Start narrow. Define what a useful result looks like, name the acceptable source families and boundaries, run the question through Winnow's CLI or Rust crates, and inspect what was found, missed, contradicted and changed before deciding whether it deserves a cadence.","open-source-winnow.close.action.primary":"Read the documentation","open-source-winnow.close.action.secondary":"Ask about the release","open-source-winnow.next.eyebrow":"Continue exploring","open-source-winnow.next.reed.category":"Related project","open-source-winnow.next.reed.title":"Reed","open-source-winnow.next.reed.description":"Parse Winnow output into content-addressed trees.","open-source-winnow.next.bitweave.category":"Related project","open-source-winnow.next.bitweave.title":"BitWeave","open-source-winnow.next.bitweave.description":"Index gathered data for fast retrieval.","open-source-winnow.next.spindle.category":"Products","open-source-winnow.next.spindle.title":"Spindle","open-source-winnow.next.spindle.description":"Knowledge governance over Winnow-collected sources.","open-source-winnow.banner.biz-recognition.eyebrow":"The recognition moment","open-source-winnow.banner.biz-recognition.lead":"No new report.","open-source-winnow.banner.biz-recognition.leadAccent":"Keep the question working.","open-source-winnow.banner.biz-recognition.paragraph.1":"The same question arrives every quarter. The analyst opens the same tabs. One source changed and nobody noticed. The spreadsheet has no reliable route back to the page. The result is already ageing by the time it circulates, and the next request is treated as new work because nobody owns the source method between reports.","open-source-winnow.banner.biz-recognition.paragraph.2":"Winnow changes that operating rhythm. The question keeps its accepted sources, output shape, recurrence and run record. People review changed or disputed material instead of reconstructing the entire route. The deliverable stops being a one-off research performance and becomes the current result of a named capability.","open-source-winnow.banner.biz-recognition.panel.header":"The repeated request","open-source-winnow.banner.biz-recognition.panel.tag":"recognised","open-source-winnow.banner.biz-recognition.check.1":"same business question","open-source-winnow.banner.biz-recognition.check.2":"same source families","open-source-winnow.banner.biz-recognition.check.3":"same cleaning","open-source-winnow.banner.biz-recognition.check.4":"same comparison","open-source-winnow.banner.biz-recognition.check.5":"same spreadsheet","open-source-winnow.banner.biz-recognition.check.6":"new source changes","open-source-winnow.banner.biz-recognition.check.7":"no durable method","open-source-winnow.banner.biz-recognition.verdict":"stop repeating the research; make the question run","open-source-winnow.banner.biz-recognition.footline":"the next run begins from the method, not from memory","open-source-winnow.banner.con-recognition.eyebrow":"The repeated ritual","open-source-winnow.banner.con-recognition.lead":"No more bookmarks.","open-source-winnow.banner.con-recognition.leadAccent":"Keep the question working.","open-source-winnow.banner.con-recognition.paragraph.1":"The same tabs. The same copy and paste. The same spreadsheet. The same doubt about which page is newest. The same work again next week. Search solved the first step, but you remained the part that joined everything together and remembered when to do it again.","open-source-winnow.banner.con-recognition.paragraph.2":"Winnow lets the product remember the question, the useful source paths and the shape of the result. You can still open the sources and judge the answer. You no longer have to rebuild the route each time before you are allowed to judge it.","open-source-winnow.banner.con-recognition.panel.header":"The question that keeps returning","open-source-winnow.banner.con-recognition.panel.tag":"recognised","open-source-winnow.banner.con-recognition.check.1":"same pages","open-source-winnow.banner.con-recognition.check.2":"same useful fields","open-source-winnow.banner.con-recognition.check.3":"same comparison","open-source-winnow.banner.con-recognition.check.4":"same doubt","open-source-winnow.banner.con-recognition.check.5":"same refresh","open-source-winnow.banner.con-recognition.verdict":"ask once, keep the sources, let the question work again","open-source-winnow.banner.con-recognition.footline":"the next answer can change without the whole method disappearing","open-source-winnow.section.win-eng-question-graph.eyebrow":"The root of the runtime","open-source-winnow.section.win-eng-question-graph.headlineLead":"A question compiles","open-source-winnow.section.win-eng-question-graph.headlineAccent":"into a source graph","open-source-winnow.section.win-eng-question-graph.body":"A scraper starts with a page. Winnow starts with why the page is being asked. The public question contract holds the objective, target, accepted source families, expected result, cadence, authority and run-record requirements. Beneath it, the runtime assembles the concrete source graph needed for this run.","open-source-winnow.section.win-eng-question-graph.secondaryKicker":"Stable above, replaceable below","open-source-winnow.section.win-eng-question-graph.secondaryLeft":"Underneath the contract the runtime types stay specialised, because a feed and a rendered page do not want the same handling. What stays stable is the declared need and its output contract. Search engines, site scrapers, collectors, crawler paths, files, feeds, streams and processing stages can change without changing the identity of the question they serve. The contract also gives change a stable place to land.","open-source-winnow.section.win-eng-question-graph.secondaryRight":"A scraper upgrade, collector replacement, engine outage or output revision can be recorded as a change to the source graph or contract rather than being hidden inside an unrelated deployment. That makes the runtime easier to test and easier to explain: engineers can compare two graph revisions against the same question, while operators can see whether a changed result came from the world, the graph or the requested output.","open-source-winnow.section.win-eng-question-graph.pill.1":"QUESTION CONTRACT","open-source-winnow.section.win-eng-question-graph.pill.2":"SOURCE GRAPH","open-source-winnow.section.win-eng-question-graph.pill.3":"ONE RUN","open-source-winnow.section.win-eng-question-graph.footer":"The graph only works if different source kinds are allowed to remain different.","open-source-winnow.section.win-eng-source-kinds.eyebrow":"The type boundary","open-source-winnow.section.win-eng-source-kinds.headlineLead":"A page, a feed and a stream","open-source-winnow.section.win-eng-source-kinds.headlineAccent":"do not have one lifecycle","open-source-winnow.section.win-eng-source-kinds.body":"Web scraping is one source kind among several, and treating it as the whole job is what makes an OSINT pipeline brittle. HTML scrapers, search engines, API clients, dataset references, RSS feeds, WebSocket streams, files and crawler paths are not decorative labels on the same request. They have different connection state, cadence, schemas, retry behaviour, authentication, outputs and failure modes. Winnow keeps those contracts explicit and lets them converge at the result boundary. A run therefore has to know which contract it is operating under, not only which address it is calling. That is what lets a failure be reported as a stream disconnect, an exhausted quota or a stale file instead of a generic request error, and it is what keeps the result boundary honest when four kinds of source answer the same question.","open-source-winnow.section.win-eng-source-kinds.secondaryKicker":"One taxonomy, several contracts","open-source-winnow.section.win-eng-source-kinds.secondaryLeft":"The 66-category vocabulary organises the source estate for filtering and planning. It does not erase whether a source is polled, streamed, crawled, rendered, downloaded or parsed from a file. That separation is what lets a collector reconnect without pretending to be a scraper retry, and lets a page extractor expose a maintained schema without pretending every unknown page has one.","open-source-winnow.section.win-eng-source-kinds.secondaryRight":"This separation also prevents operational assumptions from leaking across source classes. A polling source can have a next-run time. A stream can have a resume cursor and connection state. A file can have a content identity and import boundary. A search engine can have temporary disablement and result-cache state. Treating them all as URLs would simplify one interface while pushing the real complexity into undocumented conventions.","open-source-winnow.section.win-eng-source-kinds.pill.1":"EXPLICIT KINDS","open-source-winnow.section.win-eng-source-kinds.pill.2":"66 CATEGORIES","open-source-winnow.section.win-eng-source-kinds.pill.3":"TYPED","open-source-winnow.section.win-eng-source-kinds.footer":"When the question does not name a source, discovery has to build the first part of the graph.","open-source-winnow.section.win-eng-discovery.eyebrow":"Query planning and search","open-source-winnow.section.win-eng-discovery.headlineLead":"Search finds possible doors","open-source-winnow.section.win-eng-discovery.headlineAccent":"and the run walks through them","open-source-winnow.section.win-eng-discovery.body":"Discovery can classify a request, parse boolean structure, split dependent subqueries, select suitable engines and execute them in parallel. The twenty-eight engine integrations are a coordinated discovery layer, not twenty-eight interchangeable HTTP calls and not a claim that snippets are the answer.","open-source-winnow.section.win-eng-discovery.secondaryKicker":"Parallel without locking the registry","open-source-winnow.section.win-eng-discovery.secondaryLeft":"Engine handles are cloned while the registry is read, then the lock is released before asynchronous work begins. Each engine keeps its own timeout, retry, temporary-disable and cache state. Results return as typed candidates, then URL normalisation, deduplication, scoring and blending produce a source shortlist for the next stage. A rate-limited engine may leave one run without being removed from the registry.","open-source-winnow.section.win-eng-discovery.secondaryRight":"Discovery receipts are useful beyond debugging. They show which engines were eligible, which were attempted, which returned no candidates and which were skipped because of policy, rate or temporary health state. That is essential for source coverage claims. \"Nothing was found\" has a different meaning when twenty suitable engines completed than when the only legal engine timed out before returning.","open-source-winnow.section.win-eng-discovery.pill.1":"28 ENGINES","open-source-winnow.section.win-eng-discovery.pill.2":"DECOMPOSED","open-source-winnow.section.win-eng-discovery.pill.3":"CANDIDATE SOURCES","open-source-winnow.section.win-eng-discovery.footer":"Candidate sources still have to share one rate and failure system before any request leaves.","open-source-winnow.section.win-eng-rate-control.eyebrow":"Rate, latency and refusal","open-source-winnow.section.win-eng-rate-control.headlineLead":"Every source path waits","open-source-winnow.section.win-eng-rate-control.headlineAccent":"on the same operating state","open-source-winnow.section.win-eng-rate-control.body":"Scrapers, crawlers, collectors and optional proxy paths should not each invent their own idea of acceptable traffic. Winnow composes global burst control, per-domain state, circuit breaking and adaptive latency response so that the next request reflects what the previous requests actually encountered. One shared operating state is also what makes a claim about traffic checkable: the next request becomes eligible because of what the previous requests met, not because a component decided on its own to try again.","open-source-winnow.section.win-eng-rate-control.secondaryKicker":"Three layers, three jobs","open-source-winnow.section.win-eng-rate-control.secondaryLeft":"The global layer bounds aggregate traffic. Domain state protects individual sources and records refusal separately from slowness. Adaptive control steers request share around a configured latency target rather than treating one fixed delay as appropriate for every host. Defaults remain configuration, not product law. A circuit that opens can later admit controlled trial requests before returning a source to normal rotation.","open-source-winnow.section.win-eng-rate-control.secondaryRight":"The rate layer is designed to support source-specific behaviour without scattering source control into the extractors themselves. A collector can report that a remote window has been exhausted. A crawler can defer a frontier item. A scraper can surface a block. The controller decides when work becomes eligible again, while the source adapter remains responsible for interpreting the response correctly.","open-source-winnow.section.win-eng-rate-control.pill.1":"GLOBAL BUDGET","open-source-winnow.section.win-eng-rate-control.pill.2":"DOMAIN CIRCUIT","open-source-winnow.section.win-eng-rate-control.pill.3":"ADAPTIVE RATE","open-source-winnow.section.win-eng-rate-control.footer":"A source runtime becomes recognisable the moment rate, failure and access stop living inside individual scripts.","open-source-winnow.section.win-eng-access.eyebrow":"The proportional access path","open-source-winnow.section.win-eng-access.headlineLead":"Use the simplest route","open-source-winnow.section.win-eng-access.headlineAccent":"that the source actually needs","open-source-winnow.section.win-eng-access.body":"Direct HTTP is Winnow's normal access path. More expensive machinery appears only where a source and configuration require it. A run may add session state, protocol profiles, proxy selection or optional browser rendering, but those are explicit decisions in the source graph rather than a performance tax and behavioural disguise applied to every request.","open-source-winnow.section.win-eng-access.secondaryKicker":"Access state is part of the result path","open-source-winnow.section.win-eng-access.secondaryLeft":"A source response can depend on cookies, authentication, headers, selected proxy, transport profile, browser state, retry history and timing. Winnow keeps those concerns as explicit modules so a retry does not silently become a different identity or session. An access trace can show which routes were attempted, which one succeeded, which alternatives were skipped and whether policy or source refusal ended the path.","open-source-winnow.section.win-eng-access.secondaryRight":"Optional compatibility features for sources that run anti-bot protection remain engineering tools, not the personality of the product. They can improve reachability where a source behaves differently across clients, but they do not create permission and they are not required for the majority of supported public and structured sources. Keeping escalation visible makes its cost, identity and policy implications reviewable instead of burying them inside an opaque \"smart fetch\" call.","open-source-winnow.section.win-eng-access.pill.1":"DIRECT FIRST","open-source-winnow.section.win-eng-access.pill.2":"OPTIONAL BROWSER","open-source-winnow.section.win-eng-access.pill.3":"EXPLICIT STOP","open-source-winnow.section.win-eng-access.footer":"When the target is more than one page, access becomes a bounded traversal problem.","open-source-winnow.section.win-eng-crawl.eyebrow":"A site as a graph","open-source-winnow.section.win-eng-crawl.headlineLead":"Follow links","open-source-winnow.section.win-eng-crawl.headlineAccent":"without losing the boundary","open-source-winnow.section.win-eng-crawl.body":"A crawler is not an unbounded loop over discovered URLs. Winnow treats crawling as graph traversal under explicit origin, path, depth, page, content, concurrency, retry, rate and time limits. Breadth-first, depth-first and priority strategies change traversal order, not the declared scope of the question.","open-source-winnow.section.win-eng-crawl.secondaryKicker":"The frontier is data","open-source-winnow.section.win-eng-crawl.secondaryLeft":"Every discovered URL enters a frontier with its depth, parent, priority, source rule and current status. Canonicalisation and duplicate detection prevent the same resource from consuming the budget repeatedly. Pattern rules can include or exclude paths. Relevant URL-input paths can refuse loopback, private and link-local destinations before opening a request. A maintained scraper may be applied to matching pages while unknown pages remain generic crawl results.","open-source-winnow.section.win-eng-crawl.secondaryRight":"Crawl state can therefore be resumed, distributed or inspected as a first-class part of the run. The frontier shows what was discovered but not yet processed, the visited set shows what consumed budget, and stop reasons show whether traversal completed, reached a limit or was interrupted. This matters when a crawl result feeds a recurring question, because an incomplete crawl must not look like a complete external scan.","open-source-winnow.section.win-eng-crawl.pill.1":"BOUNDED FRONTIER","open-source-winnow.section.win-eng-crawl.pill.2":"EXPLICIT SCOPE","open-source-winnow.section.win-eng-crawl.pill.3":"SAFE RANGES","open-source-winnow.section.win-eng-crawl.footer":"Fetched HTML can then choose a complete navigable tree or a bounded streaming contract.","open-source-winnow.section.win-eng-parsers.eyebrow":"Reading HTML","open-source-winnow.section.win-eng-parsers.headlineLead":"Read HTML two ways","open-source-winnow.section.win-eng-parsers.headlineAccent":"as a full tree or as a stream","open-source-winnow.section.win-eng-parsers.body":"Winnow does not force every document through one memory and navigation model. The full DOM path builds an arena-backed tree with linked navigation, interned tag identities and incremental indices for repeated selectors. The streaming path processes chunks through registered handlers and keeps a bounded working set for forward-only extraction.","open-source-winnow.section.win-eng-parsers.secondaryKicker":"Lifecycle enforced in the type system","open-source-winnow.section.win-eng-parsers.secondaryLeft":"Streaming handlers are configured before processing begins. Chunks can only be written while the parser is in its processing state, and results become available only after finish. The typestate boundary makes invalid lifecycle calls unrepresentable in ordinary use. The full DOM path spends more memory to make repeated random navigation cheap. Neither contract is presented as universally better.","open-source-winnow.section.win-eng-parsers.secondaryRight":"Both parser contracts can feed maintained scrapers, generic extraction and evidence capture. The difference is operational rather than rhetorical: the DOM profile pays for a reusable structural representation, while streaming pays only for the handlers and state needed during forward progress. Recording that choice in the run receipt lets performance and memory claims remain tied to the actual path used.","open-source-winnow.section.win-eng-parsers.pill.1":"FULL DOM","open-source-winnow.section.win-eng-parsers.pill.2":"STREAMING","open-source-winnow.section.win-eng-parsers.pill.3":"TYPESTATE","open-source-winnow.section.win-eng-parsers.footer":"The parser exposes structure. The source-specific contract decides which structure matters.","open-source-winnow.section.win-eng-scrapers-collectors.eyebrow":"The maintained source estate","open-source-winnow.section.win-eng-scrapers-collectors.headlineLead":"A scraper knows a page family","open-source-winnow.section.win-eng-scrapers-collectors.headlineAccent":"and a collector owns a lifecycle","open-source-winnow.section.win-eng-scrapers-collectors.body":"Winnow's 1,325 site scrapers and 325 native collectors are related instruments, not two names for the same adapter. A scraper declares the sites it understands and turns their pages into typed fields. A collector declares how a structured, scheduled or persistent source behaves over time and emits records or domain payloads from that lifecycle.","open-source-winnow.section.win-eng-scrapers-collectors.secondaryKicker":"Schema is a promise about output","open-source-winnow.section.win-eng-scrapers-collectors.secondaryLeft":"A maintained scraper can publish field names, types and operational requirements for its page family. CSS selectors, embedded JSON paths and source quirks remain inside the implementation. A collector can publish source type, cadence, authentication need, validation, reconnect behaviour and payload schema. The generic extractor remains available for unknown pages, but it is marked as a fallback rather than being marketed as equivalent to maintained source knowledge.","open-source-winnow.section.win-eng-scrapers-collectors.secondaryRight":"Registry census is release evidence, not a substitute for source health. A source entry can be active, degraded, temporarily unavailable or retired. Maintained schemas can carry version and test information, while collector contracts can expose last success and current reconnect state. That gives buyers a better coverage answer than a single catalogue count and gives engineers a place to distinguish inventory from currently healthy execution.","open-source-winnow.section.win-eng-scrapers-collectors.pill.1":"1,325 SCRAPERS","open-source-winnow.section.win-eng-scrapers-collectors.pill.2":"325 COLLECTORS","open-source-winnow.section.win-eng-scrapers-collectors.pill.3":"SCHEMAS","open-source-winnow.section.win-eng-scrapers-collectors.footer":"Both paths converge on values that should keep their type and source shape.","open-source-winnow.section.win-eng-typed-enrichment.eyebrow":"From source material to usable records","open-source-winnow.section.win-eng-typed-enrichment.headlineLead":"Keep the value typed","open-source-winnow.section.win-eng-typed-enrichment.headlineAccent":"and keep where it came from","open-source-winnow.section.win-eng-typed-enrichment.body":"Winnow can emit strings, integers, fixed-point decimals, booleans, datetimes, URLs, arrays, objects, JSON, null and domain-specific payloads. If an external source sends a floating-point value, Winnow converts it explicitly at the boundary. Internal classification, comparison and storage use binary, integer or fixed-point forms.","open-source-winnow.section.win-eng-typed-enrichment.secondaryKicker":"Enrichment remains a stage","open-source-winnow.section.win-eng-typed-enrichment.secondaryLeft":"Event classification, coordinate extraction, country and cell parsing, entity linking, temporal analysis and deduplication can add structure after acquisition. Their output carries match, confidence and method state. The original source record remains available so enrichment can be inspected, revised or skipped without pretending the source published the enriched interpretation itself.","open-source-winnow.section.win-eng-typed-enrichment.secondaryRight":"The explicit type layer also improves output contracts. A caller can require a datetime rather than accepting an arbitrary string, an array of officers rather than a comma-separated field, or a location object rather than prose. Contract validation confirms shape and limits. It does not claim that the external value is factually correct, which keeps data quality and source truth from being confused with serialisation success.","open-source-winnow.section.win-eng-typed-enrichment.pill.1":"TYPED VALUES","open-source-winnow.section.win-eng-typed-enrichment.pill.2":"ENRICHMENT TRACE","open-source-winnow.section.win-eng-typed-enrichment.pill.3":"SOURCED","open-source-winnow.section.win-eng-typed-enrichment.footer":"When a question asks what supports a claim, a flat record list is no longer enough.","open-source-winnow.section.win-eng-evidence.eyebrow":"Source-aware research state","open-source-winnow.section.win-eng-evidence.headlineLead":"A clean paragraph","open-source-winnow.section.win-eng-evidence.headlineAccent":"must not erase disagreement","open-source-winnow.section.win-eng-evidence.body":"Winnow's research paths can represent claims, evidence and sources as different node types. Support, contradiction, derivation, relation and source basis remain typed edges. A claim can be supported, contradicted, mixed, insufficient or unresolved without being forced into one confident sentence because a run reached its deadline.","open-source-winnow.section.win-eng-evidence.secondaryKicker":"Credibility is contextual state","open-source-winnow.section.win-eng-evidence.secondaryLeft":"Source type, configured trust, evidence strength, recency, independence and corroboration can contribute to a score or synthesis. They do not become universal declarations that one domain or publisher is objectively trustworthy. A generated synthesis is one operation over the graph. The graph, uncertainty and contradicting nodes remain available beside it. Independence is particularly important in public-source research.","open-source-winnow.section.win-eng-evidence.secondaryRight":"Ten pages repeating one press release should not be displayed as ten separate confirmations. Winnow can preserve derivation and related-source state so synthesis and review can treat repetition differently from independent support. The graph can also keep questions that were searched but not answered, making insufficiency visible as a concrete gap rather than a vague disclaimer.","open-source-winnow.section.win-eng-evidence.pill.1":"CLAIMS","open-source-winnow.section.win-eng-evidence.pill.2":"EVIDENCE","open-source-winnow.section.win-eng-evidence.pill.3":"CONTRADICTION","open-source-winnow.section.win-eng-evidence.footer":"A source graph driven by an agent still needs hard boundaries before it can act.","open-source-winnow.section.win-eng-authority-errors.eyebrow":"Agent context and operating state","open-source-winnow.section.win-eng-authority-errors.headlineLead":"A question can run","open-source-winnow.section.win-eng-authority-errors.headlineAccent":"without unlimited authority","open-source-winnow.section.win-eng-authority-errors.body":"Configured agent-driven source work can pass through budgets, policy, safety, human approval, output contracts and audit. These are composed controls rather than one prompt instruction, and they belong to the agent path that enables them. A direct scraper or collector call runs under rate, policy and error control without waiting for a person. Authority is therefore something the deployment grants at named boundaries, and a run that never reaches those boundaries never acquires it. Every control that did apply is recorded with the run rather than inferred from configuration.","open-source-winnow.section.win-eng-authority-errors.secondaryKicker":"Errors are not empty results","open-source-winnow.section.win-eng-authority-errors.secondaryLeft":"Blocked, rate limited, not found, malformed, denied, budget exhausted, timed out, parser failed and source unavailable are operating conditions with different retry and escalation semantics. A running question must preserve those distinctions because silence can otherwise be mistaken for \"nothing changed\". Error chains can retain source context, retry decisions, fallback attempts and user-facing classification.","open-source-winnow.section.win-eng-authority-errors.secondaryRight":"Output contracts close another common gap. A run can technically succeed while failing to return the fields, cardinality or evidence state the caller required. Contract failure should remain separate from source failure: the sources may have answered, but the answer was not usable for this question. Keeping that distinction typed prevents downstream automation from accepting structurally incomplete source work.","open-source-winnow.section.win-eng-authority-errors.pill.1":"BUDGET","open-source-winnow.section.win-eng-authority-errors.pill.2":"POLICY","open-source-winnow.section.win-eng-authority-errors.pill.3":"TYPED ERRORS","open-source-winnow.section.win-eng-authority-errors.footer":"The last architectural test is whether every client and worker still recognises the same question and result contracts.","open-source-winnow.section.win-eng-surfaces-distributed.eyebrow":"Deployment without rewriting the source model","open-source-winnow.section.win-eng-surfaces-distributed.headlineLead":"Start with one binary","open-source-winnow.section.win-eng-surfaces-distributed.headlineAccent":"and split the work when it earns it","open-source-winnow.section.win-eng-surfaces-distributed.body":"Winnow can be used through the command-line binary, embedded Rust crates, an HTTP service, Python bindings and WebAssembly paths. Each surface exposes the operations that make sense for it, and the browser, distributed and service capabilities are enabled where a deployment wants them. What stays recognisable across all of them is the question identity, source-kind vocabulary, typed result and run record. A deployment can stay on the one binary indefinitely without losing the vocabulary the other surfaces use.","open-source-winnow.section.win-eng-surfaces-distributed.secondaryKicker":"Coordination is separate from source execution","open-source-winnow.section.win-eng-surfaces-distributed.secondaryLeft":"Distributed deployments can assign source tasks to scraper workers and processing tasks to processor workers. Tasks retain question and run identity, lifecycle, retry count, deadline and output contract. Results merge under the question rather than becoming anonymous worker outputs. Memory, peer-to-peer and gRPC-style transports are deployment choices, selected for the shape of the estate. Service middleware belongs to the HTTP service.","open-source-winnow.section.win-eng-surfaces-distributed.secondaryRight":"Authentication, body limits, request timeouts, logging and service rate policies wrap service calls, and a Rust embedding sets its own boundary instead. The question identity, source vocabulary and run receipt are shared across every surface; the deployment controls belong to the surface that offers them. Every surface ships under the same Apache-2.0 terms, so the runtime can be read, changed and pinned wherever it runs.","open-source-winnow.section.win-eng-surfaces-distributed.pill.1":"40 MB BINARY","open-source-winnow.section.win-eng-surfaces-distributed.pill.2":"5 OUTPUT FORMATS","open-source-winnow.section.win-eng-surfaces-distributed.pill.3":"DISTRIBUTED","open-source-winnow.section.win-eng-surfaces-distributed.footer":"The implementation can scale and change. The question contract is the durable boundary.","open-source-winnow.section.win-biz-browser-history.eyebrow":"The hidden operating dependency","open-source-winnow.section.win-biz-browser-history.headlineLead":"The question keeps returning","open-source-winnow.section.win-biz-browser-history.headlineAccent":"but the method never stays","open-source-winnow.section.win-biz-browser-history.body":"Has the regulation changed? Did the supplier publish a new filing? Which products moved in price? What happened in this market, region or research field since yesterday? Most organisations have answers to these questions, but no durable system for producing them. They have a person who remembers where to look. When that person is away the question waits, and when they leave the method leaves with them. The next analyst starts from a search box rather than from the route that worked last time.","open-source-winnow.section.win-biz-browser-history.secondaryKicker":"The answer is delivered, the capability is not","open-source-winnow.section.win-biz-browser-history.secondaryLeft":"The analyst searches, opens pages, copies fragments, cleans names, compares dates, judges sources and writes a result. The browser tabs close. The spreadsheet records the outcome but not the complete route. Next week or next quarter, the same work begins again. Winnow turns that external question into a named source process with accepted source families, a result shape, recurrence and a record of how each run behaved.","open-source-winnow.section.win-biz-browser-history.secondaryRight":"This matters most when the question influences a repeated decision: whether to approve a supplier, change a policy, enter a market, escalate a security signal or update a customer. The organisation should be able to name the source method behind that input with the same confidence that it names the internal system behind an invoice or stock position.","open-source-winnow.section.win-biz-browser-history.pill.1":"RECURRING QUESTION","open-source-winnow.section.win-biz-browser-history.pill.2":"OWNED METHOD","open-source-winnow.section.win-biz-browser-history.pill.3":"SOURCED","open-source-winnow.section.win-biz-browser-history.footer":"The problem is not that the outside world lacks data. It is that the outside world has no shared table.","open-source-winnow.section.win-biz-world-not-database.eyebrow":"The uncertain external edge","open-source-winnow.section.win-biz-world-not-database.headlineLead":"Internal systems have tables","open-source-winnow.section.win-biz-world-not-database.headlineAccent":"but the outside world has sources","open-source-winnow.section.win-biz-world-not-database.body":"Enterprise data work normally begins after the source, schema and owner are known. External source intelligence begins before any of those are settled. Useful material may be spread across pages, public registers, structured APIs, feeds, files, datasets, search engines, rendered applications and live streams, with different dates, identifiers, terms and update rhythms. None of it arrives with an owner, a schema or a change log.","open-source-winnow.section.win-biz-world-not-database.secondaryKicker":"Source work is real infrastructure","open-source-winnow.section.win-biz-world-not-database.secondaryLeft":"Before normal analysis begins, someone has to discover where the material lives, decide which sources are acceptable, negotiate how each can be reached, interpret its native structure, normalise the result and keep enough source context to understand what it means. In most organisations, a person performs that translation by hand, or a web scraping script does part of it and an OSINT analyst does the rest.","open-source-winnow.section.win-biz-world-not-database.secondaryRight":"Winnow turns the whole of it into an explicit source runtime beneath the question. Source intelligence therefore begins where conventional data integration normally stops being comfortable. Schemas may be partial, interfaces may be public but unstable, and useful context may be split across prose and structured records. Winnow makes that uncertain edge manageable without presenting it as a clean database that never changes.","open-source-winnow.section.win-biz-world-not-database.pill.1":"PAGES","open-source-winnow.section.win-biz-world-not-database.pill.2":"APIS","open-source-winnow.section.win-biz-world-not-database.pill.3":"FEEDS","open-source-winnow.section.win-biz-world-not-database.pill.4":"FILES","open-source-winnow.section.win-biz-world-not-database.pill.5":"STREAMS","open-source-winnow.section.win-biz-world-not-database.footer":"Today the translation is often performed by a person, which makes the person the integration layer.","open-source-winnow.section.win-biz-person-integration.eyebrow":"The cost nobody budgets","open-source-winnow.section.win-biz-person-integration.headlineLead":"The method lives in one person","open-source-winnow.section.win-biz-person-integration.headlineAccent":"and nowhere else","open-source-winnow.section.win-biz-person-integration.body":"Repeated external research consumes more than analyst hours. It creates key-person dependency, inconsistent source selection, unrecorded access choices and outputs whose freshness is hard to state. The organisation pays every time the question returns because the method was never promoted from personal practice into operating infrastructure. The cost is paid again on every repeat, and it never accumulates into anything the next person can pick up.","open-source-winnow.section.win-biz-person-integration.secondaryKicker":"Manual work hides risk as well as cost","open-source-winnow.section.win-biz-person-integration.secondaryLeft":"People can notice context that a script misses; Winnow does not remove judgement. It takes on repeated mechanical work and makes the remaining judgement visible. Discovery, retrieval, extraction, normalisation, deduplication and source comparison can run consistently, while disagreements and approvals stay visible for deliberate human review instead of hiding in a browser workflow.","open-source-winnow.section.win-biz-person-integration.secondaryRight":"The point is not to replace analysts with automation. It is to stop using analysts as protocol adapters. People remain responsible for scope, interpretation and decisions. The runtime absorbs the repeated mechanics, gives them a clearer review queue and preserves the method for the next person who inherits the question.","open-source-winnow.section.win-biz-person-integration.pill.1":"KEY-PERSON RISK","open-source-winnow.section.win-biz-person-integration.pill.2":"REPEATED LABOUR","open-source-winnow.section.win-biz-person-integration.pill.3":"JUDGEMENT","open-source-winnow.section.win-biz-person-integration.footer":"The reversal is to make the question, not the source integration, the operating asset.","open-source-winnow.section.win-biz-question-asset.eyebrow":"The category reversal","open-source-winnow.section.win-biz-question-asset.headlineLead":"Sources change","open-source-winnow.section.win-biz-question-asset.headlineAccent":"but the business need persists","open-source-winnow.section.win-biz-question-asset.body":"A source can redesign its page, move an endpoint, disappear, change its terms or be replaced by something better. When the source is the architecture, each event becomes another integration project. When the question is the asset, the source graph can be maintained, expanded or replaced beneath a stable objective and output contract.","open-source-winnow.section.win-biz-question-asset.secondaryKicker":"What the organisation owns","open-source-winnow.section.win-biz-question-asset.secondaryLeft":"The durable question can state its target, accepted source families, required fields, cadence, authority and run-record requirements. The current source graph is the implementation for one period. The organisation can review which sources support the result, which were unavailable and which paths changed without rewriting the business case every time the outside world moves.","open-source-winnow.section.win-biz-question-asset.secondaryRight":"A question can also have an owner, service expectation and review date. That makes it possible to discuss freshness, acceptable source gaps and escalation before a decision is missed. Instead of asking whether a script is still running, the business asks whether the question is healthy and whether its current result meets the declared contract.","open-source-winnow.section.win-biz-question-asset.pill.1":"STABLE OBJECTIVE","open-source-winnow.section.win-biz-question-asset.pill.2":"REPLACEABLE SOURCES","open-source-winnow.section.win-biz-question-asset.footer":"A durable question can then combine source forms without being redesigned around each protocol.","open-source-winnow.section.win-biz-source-graph.eyebrow":"One business need, several instruments","open-source-winnow.section.win-biz-source-graph.headlineLead":"Many ways in","open-source-winnow.section.win-biz-source-graph.headlineAccent":"and one result contract out","open-source-winnow.section.win-biz-source-graph.body":"A serious supplier, market, policy or security question rarely has one source. The useful answer may require general discovery, official registers, structured public interfaces, maintained websites, specialist feeds, published files and live streams. Winnow lets those source forms assemble around the question while keeping their origin and lifecycle visible. No single source has to carry the question on its own. Replacing one of them is maintenance on the source graph rather than a redesign of the question above it.","open-source-winnow.section.win-biz-source-graph.secondaryKicker":"Breadth without protocol projects","open-source-winnow.section.win-biz-source-graph.secondaryLeft":"The current estate of 1,325 site scrapers, 325 native collectors and 28 search engines across 66 categories matters because a business question can use a supported combination. These are maintained totals, not instruments loaded into every run: each question selects only what it needs. The value lies in the shared runtime and output boundary around that selection.","open-source-winnow.section.win-biz-source-graph.secondaryRight":"This is also how Winnow avoids locking a business process to one commercial source. A paid API may be one valuable instrument. The question can still retain official pages, open feeds or alternate references around it. Replacing a vendor becomes source-graph maintenance rather than a redesign of the business workflow consuming the result.","open-source-winnow.section.win-biz-source-graph.pill.1":"1,325 SCRAPERS","open-source-winnow.section.win-biz-source-graph.pill.2":"325 COLLECTORS","open-source-winnow.section.win-biz-source-graph.pill.3":"28 ENGINES","open-source-winnow.section.win-biz-source-graph.footer":"The pattern is familiar: the same request returns, the same tabs reopen, and the method begins again.","open-source-winnow.section.win-biz-typed-output.eyebrow":"The handoff","open-source-winnow.section.win-biz-typed-output.headlineLead":"Pages go in","open-source-winnow.section.win-biz-typed-output.headlineAccent":"and usable records come back","open-source-winnow.section.win-biz-typed-output.body":"The commercial value of source intelligence is not the number of pages fetched. It is what the operation can use next. Maintained scrapers and native collectors can return named fields, dates, prices, identifiers, locations, events, filings and domain payloads with the source attached, ready for a workflow, review queue, dataset, dashboard, model or report.","open-source-winnow.section.win-biz-typed-output.secondaryKicker":"The output contract narrows adoption","open-source-winnow.section.win-biz-typed-output.secondaryLeft":"Text, JSON, JSONL, CSV and HTML outputs let a pilot fit beside systems already in use. Winnow replaces the source-collection side of the stack without requiring the organisation to replace its warehouse, reporting, review or decision system. A pilot can be judged on whether the expected typed records arrive with the route required to inspect them. The record-first handoff improves generative and analytical systems as well.","open-source-winnow.section.win-biz-typed-output.secondaryRight":"An LLM agent or RAG pipeline receives named values and source references rather than an unbounded browser transcript to re-parse. A dashboard receives change state rather than raw pages. A reviewer receives the exact items that require judgement. Each downstream consumer can use the same collected material without Winnow forcing one presentation on all of them.","open-source-winnow.section.win-biz-typed-output.pill.1":"TYPED OUTPUT","open-source-winnow.section.win-biz-typed-output.pill.2":"SOURCE ATTACHED","open-source-winnow.section.win-biz-typed-output.pill.3":"5 FORMATS","open-source-winnow.section.win-biz-typed-output.footer":"When several sources answer, the system should preserve the shape of their disagreement.","open-source-winnow.section.win-biz-disagreement.eyebrow":"Source honesty","open-source-winnow.section.win-biz-disagreement.headlineLead":"Two sources can disagree","open-source-winnow.section.win-biz-disagreement.headlineAccent":"without one being silently erased","open-source-winnow.section.win-biz-disagreement.body":"One page is not the same as several independent sources. A result supported by an official filing and two independent reports should not look identical to a claim copied across five syndicated sites. A contradicting source should not disappear because a summary prefers a clean narrative.","open-source-winnow.section.win-biz-disagreement.secondaryKicker":"Evidence state improves decisions without pretending to be truth","open-source-winnow.section.win-biz-disagreement.secondaryLeft":"Winnow can preserve source identity, support, contradiction, derivation, recency and configured credibility inputs. The output may remain mixed, insufficient or unresolved. That state gives reviewers something better than false certainty: the material, the relationships and the missing question that would settle it. Winnow tells the organisation what the sources said, not what reality must be.","open-source-winnow.section.win-biz-disagreement.secondaryRight":"The organisation can configure credibility inputs and source classifications for its context, but the configuration remains visible. This prevents a score from masquerading as objective authority. A public register may be preferred for legal status, while a live operational feed may be preferred for current availability. The reason belongs to the question and source policy, not to an unexplained global ranking.","open-source-winnow.section.win-biz-disagreement.pill.1":"SUPPORT","open-source-winnow.section.win-biz-disagreement.pill.2":"CONTRADICTION","open-source-winnow.section.win-biz-disagreement.pill.3":"UNRESOLVED","open-source-winnow.section.win-biz-disagreement.footer":"The outside world will change again, so the same question needs a way to produce a change rather than another pile.","open-source-winnow.section.win-biz-recurrence.eyebrow":"From research request to operating rhythm","open-source-winnow.section.win-biz-recurrence.headlineLead":"Once, scheduled, incremental","open-source-winnow.section.win-biz-recurrence.headlineAccent":"or continuously connected","open-source-winnow.section.win-biz-recurrence.body":"A recurring question should not recreate every source decision and return a full undifferentiated dataset each time. Winnow can retain the question, source state and previous result boundary so a later run can report what was added, changed, removed, expired, unavailable or newly contradicted. A run that reports only what moved is a shorter piece of review work than a full dataset delivered again. The retained result boundary is what makes that difference statable rather than guessed at.","open-source-winnow.section.win-biz-recurrence.secondaryKicker":"A different answer can be correct","open-source-winnow.section.win-biz-recurrence.secondaryLeft":"Live sources change. The later result is not required to match the earlier one. The value lies in preserving enough method and run state to tell whether the world changed, a source changed, the source graph changed or the run failed. That distinction turns monitoring from a stream of alerts into a controlled external operating input.","open-source-winnow.section.win-biz-recurrence.secondaryRight":"Recurrence can follow the source rather than one universal clock. A filing question may run daily. A public feed may remain connected. A large crawl may progress incrementally. A price question may combine scheduled pages with streaming changes. The business sees one current question state while the runtime uses the cadence appropriate to each source path.","open-source-winnow.section.win-biz-recurrence.pill.1":"CHANGE SET","open-source-winnow.section.win-biz-recurrence.pill.2":"CADENCE","open-source-winnow.section.win-biz-recurrence.pill.3":"RUN HISTORY","open-source-winnow.section.win-biz-recurrence.footer":"A question that runs repeatedly needs declared boundaries around access, spend and decision-making.","open-source-winnow.section.win-biz-boundaries-receipt.eyebrow":"Control and review","open-source-winnow.section.win-biz-boundaries-receipt.headlineLead":"Access, spend and authority","open-source-winnow.section.win-biz-boundaries-receipt.headlineAccent":"are part of the operating design","open-source-winnow.section.win-biz-boundaries-receipt.body":"Winnow includes source rate control, circuit breaking, relevant unsafe-address protections, typed errors and configurable source rules. Agent-backed workflows can add budgets, policy, safety checks, human approval, output contracts and structured audit. These controls help the organisation operate source work consistently while keeping human decisions at explicit boundaries. Each of those controls is configured rather than assumed.","open-source-winnow.section.win-biz-boundaries-receipt.secondaryKicker":"The run record is operational evidence","open-source-winnow.section.win-biz-boundaries-receipt.secondaryLeft":"A receipt can retain the query plan, engines attempted, selected source, access route, parser or collector, content identifier, fields emitted, enrichment, authority events, errors and output. It helps explain why a result changed or why a run produced nothing. It records what the system did; it does not make the external source true by recording it. The same record supports supplier and internal review.","open-source-winnow.section.win-biz-boundaries-receipt.secondaryRight":"Operations can show the configured source boundary and current rate state. Security can inspect unsafe-address refusals and authenticated paths. Risk can see which claims remain mixed. Procurement can understand optional browser, proxy or API dependencies. The receipt does not eliminate review work; it gives each reviewer concrete material instead of a generic platform assurance.","open-source-winnow.section.win-biz-boundaries-receipt.pill.1":"BOUNDARIES","open-source-winnow.section.win-biz-boundaries-receipt.pill.2":"TYPED FAILURE","open-source-winnow.section.win-biz-boundaries-receipt.pill.3":"RUN RECEIPT","open-source-winnow.section.win-biz-boundaries-receipt.footer":"Once the method is owned and reviewable, deployment can start small and scale only when the question earns it.","open-source-winnow.section.win-biz-deployment-economics.eyebrow":"Source-available deployment and economics","open-source-winnow.section.win-biz-deployment-economics.headlineLead":"One recurring question first","open-source-winnow.section.win-biz-deployment-economics.headlineAccent":"not a migration programme","open-source-winnow.section.win-biz-deployment-economics.body":"The core Winnow release is one approximately 40 MB binary for Linux, macOS and Windows, under the Apache-2.0 license, publishing in the eighth round of Dweve's foundation release programme. A team can start with a command, a question and one of five output formats. Rust embedding, an HTTP service, Python, WebAssembly, optional browser capacity and distributed workers can follow when the workload requires them. Nothing in that first step requires a migration, a new data platform or a second service to operate. The scale-out paths exist for when the workload asks for them, and not before.","open-source-winnow.section.win-biz-deployment-economics.secondaryKicker":"What consolidates","open-source-winnow.section.win-biz-deployment-economics.secondaryLeft":"Running it yourself means there is no hosted collection service in the path of a question. Discovery, scraping, collection, crawling, parsing, deduplication, scheduling, controls and outputs become one owned source system rather than separate services with glue between them, on infrastructure the organisation already has and a release schedule it already sets.","open-source-winnow.section.win-biz-deployment-economics.secondaryRight":"The release census also supports capacity planning. The organisation can see which source families already have maintained instruments and which need new work before committing to a programme. Custom scrapers and collectors remain normal extension work, but they join an existing lifecycle for rate control, errors, scheduling, output and operation instead of creating another isolated service.","open-source-winnow.section.win-biz-deployment-economics.pill.1":"APACHE-2.0","open-source-winnow.section.win-biz-deployment-economics.pill.2":"40 MB BINARY","open-source-winnow.section.win-biz-deployment-economics.pill.3":"SELF-HOSTED","open-source-winnow.section.win-biz-deployment-economics.footer":"What earns its place is not the biggest catalogue; it is one important question that no longer starts from scratch.","open-source-winnow.section.win-con-ask-once.eyebrow":"In plain words","open-source-winnow.section.win-con-ask-once.headlineLead":"You ask what you need","open-source-winnow.section.win-con-ask-once.headlineAccent":"and it looks underneath","open-source-winnow.section.win-con-ask-once.body":"Some questions are easy once and tiring every time after that. Which Sunday trains reach the city before ten? Has this product fallen in price? Did the rule change? Has the company published anything new? You search, open pages, compare dates and make a list. Then the world changes and you do it again.","open-source-winnow.section.win-con-ask-once.secondaryKicker":"A question can become something a product remembers","open-source-winnow.section.win-con-ask-once.secondaryLeft":"A product built with Winnow can keep what you asked, look across suitable supported sources, bring back the useful parts with a note of where they came from, and look again later. The next answer may be different because the timetable, price, rule or company changed. The work of asking does not have to start from zero.","open-source-winnow.section.win-con-ask-once.secondaryRight":"This can be useful for ordinary personal questions and for the systems people rely on at work. The important part is not that a computer searches faster. It is that the useful route can be remembered, the sources remain visible and the next check can focus on what changed. The route stays visible either way.","open-source-winnow.section.win-con-ask-once.pill.1":"ASK","open-source-winnow.section.win-con-ask-once.pill.2":"LOOK","open-source-winnow.section.win-con-ask-once.pill.3":"CHECK AGAIN","open-source-winnow.section.win-con-ask-once.footer":"Search normally stops before the tiring part begins.","open-source-winnow.section.win-con-search-work.eyebrow":"What happens after the links","open-source-winnow.section.win-con-search-work.headlineLead":"Open, read, copy, compare","open-source-winnow.section.win-con-search-work.headlineAccent":"then make your own answer","open-source-winnow.section.win-con-search-work.body":"A search page is useful because it shows possible places to look. It does not usually find the exact line inside each page, turn different dates into one order, notice that two names refer to the same organisation, explain why two sources disagree or remember the whole process for next week.","open-source-winnow.section.win-con-search-work.secondaryKicker":"Winnow carries the question further","open-source-winnow.section.win-con-search-work.secondaryLeft":"The product can follow suitable results, read the source in the form it was published, pick out the fields the question needs and return them in one clear shape. Search remains one lens underneath. It does not become the answer simply because it appeared first.","open-source-winnow.section.win-con-search-work.secondaryRight":"You remain free to open every page yourself. Winnow simply lets the product take on the repetitive joining work underneath. That is why the answer should still show sources: convenience should remove repeated labour, not remove your ability to inspect where a claim came from.","open-source-winnow.section.win-con-search-work.pill.1":"LINKS FIRST","open-source-winnow.section.win-con-search-work.pill.2":"USEFUL PARTS NEXT","open-source-winnow.section.win-con-search-work.pill.3":"ONE RESULT","open-source-winnow.section.win-con-search-work.footer":"The useful answer may live in more than ordinary web pages.","open-source-winnow.section.win-con-source-kinds.eyebrow":"Under the surface","open-source-winnow.section.win-con-source-kinds.headlineLead":"A website, a register, a feed","open-source-winnow.section.win-con-source-kinds.headlineAccent":"or live public data","open-source-winnow.section.win-con-source-kinds.body":"The information you need may be on a normal website. It may be in an official register, a timetable, a public dataset, a news feed, a file, a live stream or an interface built for other software. You should not have to understand which technical route each source needs before you can ask the question.","open-source-winnow.section.win-con-source-kinds.secondaryKicker":"Different places can return one useful account","open-source-winnow.section.win-con-source-kinds.secondaryLeft":"Winnow lets a product choose from supported source paths underneath. A page may be read by web scraping, with a scraper somebody maintains for that site. A public interface may return structured records. A feed may keep the answer current. Search may discover a source nobody named in advance. Each result can still show where it came from.","open-source-winnow.section.win-con-source-kinds.secondaryRight":"A source may also fail or be late. A careful product can say that the council page did not answer while the river feed did, rather than giving the impression that every relevant place was checked successfully. The source list becomes part of the answer instead of hidden technical machinery. A late source is reported, not quietly dropped.","open-source-winnow.section.win-con-source-kinds.pill.1":"PAGES","open-source-winnow.section.win-con-source-kinds.pill.2":"REGISTERS","open-source-winnow.section.win-con-source-kinds.pill.3":"FEEDS","open-source-winnow.section.win-con-source-kinds.pill.4":"PUBLIC DATA","open-source-winnow.section.win-con-source-kinds.footer":"The feeling is familiar: you have already done this search, and nothing about the next time will be new.","open-source-winnow.section.win-con-sourced-result.eyebrow":"What comes back","open-source-winnow.section.win-con-sourced-result.headlineLead":"The useful parts","open-source-winnow.section.win-con-sourced-result.headlineAccent":"with where they came from","open-source-winnow.section.win-con-sourced-result.body":"Instead of another pile of pages, a product can return a list, comparison, timeline, set of changes or other clear account. Names can stay names, dates stay dates, prices stay numbers and locations stay places. The source can travel beside each part so you can open it and check what was published.","open-source-winnow.section.win-con-sourced-result.secondaryKicker":"A clean answer should not demand blind trust","open-source-winnow.section.win-con-sourced-result.secondaryLeft":"Winnow is designed to keep source references and run context available to the product using it. That means a sentence, price or event can point back to the page, register, feed or dataset it came from. A missing source or failed lookup can be shown as missing instead of being quietly converted into certainty.","open-source-winnow.section.win-con-sourced-result.secondaryRight":"The exact form depends on the product. It may be a table, a paragraph, a map, a comparison or an alert. Winnow's role is underneath: keep the collected pieces structured and connected to their source so the visible product can be simple without being untraceable. The link back to the page travels with it.","open-source-winnow.section.win-con-sourced-result.pill.1":"TIDY","open-source-winnow.section.win-con-sourced-result.pill.2":"SOURCED","open-source-winnow.section.win-con-sourced-result.pill.3":"CHECKABLE","open-source-winnow.section.win-con-sourced-result.footer":"Sometimes the most honest result is that the sources do not yet tell one settled story.","open-source-winnow.section.win-con-disagreement-refresh.eyebrow":"Honest uncertainty and change","open-source-winnow.section.win-con-disagreement-refresh.headlineLead":"Supported, contradicted","open-source-winnow.section.win-con-disagreement-refresh.headlineAccent":"or not enough yet","open-source-winnow.section.win-con-disagreement-refresh.body":"Two sources may disagree. A report may repeat another report rather than confirm it independently. A new source may appear tomorrow. A careful product can show that the story is mixed or incomplete instead of forcing one confident answer because confidence looks cleaner on a screen.","open-source-winnow.section.win-con-disagreement-refresh.secondaryKicker":"A later answer is allowed to be different","open-source-winnow.section.win-con-disagreement-refresh.secondaryLeft":"Some questions matter once. Others matter every day, week or time a source changes. Winnow can help a product run the same source work again and show what changed. A different result does not automatically mean the earlier one was wrong. It may mean the outside world moved or new information arrived.","open-source-winnow.section.win-con-disagreement-refresh.secondaryRight":"The same honesty applies when nothing is found. \"No matching result\" should be different from \"the source was unavailable\" or \"the search did not complete\". Those differences matter whenever the question influences travel, money, work or safety, and they are easier to understand when the product states them plainly.","open-source-winnow.section.win-con-disagreement-refresh.pill.1":"MIXED","open-source-winnow.section.win-con-disagreement-refresh.pill.2":"UNRESOLVED","open-source-winnow.section.win-con-disagreement-refresh.pill.3":"CHECK AGAIN","open-source-winnow.section.win-con-disagreement-refresh.footer":"The looking can be careful, self-hosted and open without becoming another task the user has to understand.","open-source-winnow.section.win-con-behind-product.eyebrow":"The engine underneath","open-source-winnow.section.win-con-behind-product.headlineLead":"You do not need to run a scraper","open-source-winnow.section.win-con-behind-product.headlineAccent":"to receive a sourced answer","open-source-winnow.section.win-con-behind-product.body":"Most people meet Winnow through another application, research tool, dashboard or company system. You ask in the product you already use. Winnow handles supported source discovery, reading and extraction underneath. The visible experience is simple: you ask, it looks, it brings back the useful parts and where they came from. Nothing in that arrangement asks you to install a crawler, keep a scraper working or learn which route a source needs. You ask in the product you already use, and the parts that come back carry the page they came from, so you can open it and read it yourself.","open-source-winnow.section.win-con-behind-product.secondaryKicker":"Publishing the repository keeps the looking inspectable","open-source-winnow.section.win-con-behind-product.secondaryLeft":"Winnow runs under Apache-2.0 terms on infrastructure the operator controls, and the repository publishes in the eighth round of the foundation release programme. The machinery around the question is not hidden inside a collection service somewhere else, so anyone can inspect how sources are selected and how results are assembled.","open-source-winnow.section.win-con-behind-product.secondaryRight":"The operator decides what the product is allowed to look at, which optional services it uses and how long it keeps collected material. Once the repository publishes, those choices are inspectable and replaceable, and each deployment is configured for the work it does. Nothing is fixed in place by the tool itself.","open-source-winnow.section.win-con-behind-product.pill.1":"BEHIND THE PRODUCT","open-source-winnow.section.win-con-behind-product.pill.2":"OPEN SOURCE","open-source-winnow.section.win-con-behind-product.pill.3":"YOUR ESTATE","open-source-winnow.section.win-con-behind-product.footer":"Choose something you keep looking up. Let the question keep working.","open-source-winnow.banner.eng-bounds.eyebrow":"The access boundary","open-source-winnow.banner.eng-bounds.lead":"The route may change.","open-source-winnow.banner.eng-bounds.accent":"The boundary may not.","open-source-winnow.banner.eng-bounds.paragraph.1":"One source may answer a direct request. Another may require session state, a public API or browser rendering. Winnow can choose among configured access paths without turning that choice into permission to leave the question's declared scope.","open-source-winnow.banner.eng-bounds.paragraph.2":"Rate, origin, path, depth, page, retry and time limits remain part of the run while the route adapts. The resulting trace shows which path was attempted, which one succeeded and whether policy or the source itself ended the work.","open-source-winnow.banner.eng-bounds.panel.header":"Bounded source route","open-source-winnow.banner.eng-bounds.panel.tag":"Limits travel with it","open-source-winnow.banner.eng-bounds.item.1.label":"Question contract","open-source-winnow.banner.eng-bounds.item.1.detail":"Names the allowed source work.","open-source-winnow.banner.eng-bounds.item.2.label":"Rate and retry state","open-source-winnow.banner.eng-bounds.item.2.detail":"Responds to what the source returned.","open-source-winnow.banner.eng-bounds.item.3.label":"Crawl limits","open-source-winnow.banner.eng-bounds.item.3.detail":"Keep discovery inside the declared graph.","open-source-winnow.banner.eng-bounds.item.4.label":"Access trace","open-source-winnow.banner.eng-bounds.item.4.detail":"Records the route and its stopping reason.","open-source-winnow.banner.eng-bounds.verdict.label":"Run boundary","open-source-winnow.banner.eng-bounds.verdict.value":"Adapt the access method without silently expanding the question.","open-source-winnow.banner.eng-bounds.footline":"A flexible route remains accountable when every branch keeps the same limits.","open-source-winnow.banner.biz-record.eyebrow":"What the business receives","open-source-winnow.banner.biz-record.lead":"The result is not the report.","open-source-winnow.banner.biz-record.accent":"It is the record beneath it.","open-source-winnow.banner.biz-record.paragraph.1":"A report is one presentation of a source run. The same collected material may also feed a dashboard, a comparison, an alert or a review queue, so screenshots and copied paragraphs are a poor boundary between the source work and everything that uses it.","open-source-winnow.banner.biz-record.paragraph.2":"Winnow hands over typed values with source references and run context. Each downstream system can present those records differently while reviewers retain one route back to the material, its collection conditions and any gaps.","open-source-winnow.banner.biz-record.panel.header":"Operational handover","open-source-winnow.banner.biz-record.panel.tag":"Presentation independent","open-source-winnow.banner.biz-record.item.1.label":"Named question","open-source-winnow.banner.biz-record.item.1.detail":"The purpose and expected result.","open-source-winnow.banner.biz-record.item.2.label":"Source route","open-source-winnow.banner.biz-record.item.2.detail":"Where each field came from.","open-source-winnow.banner.biz-record.item.3.label":"Typed records","open-source-winnow.banner.biz-record.item.3.detail":"Values ready for more than one consumer.","open-source-winnow.banner.biz-record.item.4.label":"Run receipt","open-source-winnow.banner.biz-record.item.4.detail":"What completed, failed or remained missing.","open-source-winnow.banner.biz-record.verdict.label":"Handover test","open-source-winnow.banner.biz-record.verdict.value":"Change the presentation without losing the source route.","open-source-winnow.banner.biz-record.footline":"One source process can serve several systems without becoming several methods.","open-source-winnow.close.title":"Choose one question that keeps coming back","open-source-winnow.close.titleAccent":"and make it run","open-source-winnow.close.panel.title":"What you would be adopting","open-source-winnow.close.panel.tag":"RUNTIME","open-source-winnow.close.panel.row.0.label":"Licence","open-source-winnow.close.panel.row.0.value":"Apache-2.0","open-source-winnow.close.panel.row.1.label":"Delivery","open-source-winnow.close.panel.row.1.value":"CLI, crate, service or WASM","open-source-winnow.close.panel.row.2.label":"Deployment","open-source-winnow.close.panel.row.2.value":"Your servers, EU region or isolated","open-source-winnow.close.panel.row.3.label":"Output","open-source-winnow.close.panel.row.3.value":"Typed results with their source","open-source-winnow.close.panel.foot":"Publication is planned in fortnightly rounds. Winnow is scheduled for round eight, with its documentation live the same day.","oss-winnow-access-ladder.kicker.label":"Access ladder","oss-winnow-access-ladder.kicker.sub":"the first permitted success wins","oss-winnow-access-ladder.tag":"ACCESS","oss-winnow-access-ladder.rung.direct.name":"Direct HTTP","oss-winnow-access-ladder.rung.direct.use":"Static pages, APIs, feeds and ordinary server responses.","oss-winnow-access-ladder.rung.direct.note":"the normal fast path","oss-winnow-access-ladder.rung.session.name":"Adaptive or session path","oss-winnow-access-ladder.rung.session.use":"Sources requiring persistent state or a different declared profile.","oss-winnow-access-ladder.rung.session.note":"where a source requires more","oss-winnow-access-ladder.rung.browser.name":"Rendered browser path","oss-winnow-access-ladder.rung.browser.use":"Applications whose useful content exists only after rendering.","oss-winnow-access-ladder.rung.browser.note":"the narrowest lane","oss-winnow-access-ladder.rung.stop.name":"Stop","oss-winnow-access-ladder.rung.stop.use":"Policy denial, source refusal, exhausted budget or unsupported route.","oss-winnow-access-ladder.rung.stop.note":"a valid outcome","oss-winnow-access-ladder.foot.left":"reachability is recorded","oss-winnow-access-ladder.foot.right":"permission remains an operator decision","oss-winnow-access-trace.chrome.path":"The access ladder","oss-winnow-access-trace.chrome.status":"three routes succeed, one stops by policy","oss-winnow-access-trace.chrome.meta":"DIRECT FIRST","oss-winnow-access-trace.head.corner":"escalation only when required","oss-winnow-access-trace.rung.direct":"01 direct HTTP","oss-winnow-access-trace.rung.session":"02 session path","oss-winnow-access-trace.rung.browser":"03 rendered browser","oss-winnow-access-trace.rung.browserNote":"the narrowest lane","oss-winnow-access-trace.rung.stop":"04 stop","oss-winnow-access-trace.cell.untouched":"untouched","oss-winnow-access-trace.cell.notNeeded":"not needed","oss-winnow-access-trace.cell.neverSent":"never sent","oss-winnow-access-trace.lane.endpoint.name":"Official JSON endpoint","oss-winnow-access-trace.lane.endpoint.kind":"structured public interface","oss-winnow-access-trace.lane.endpoint.direct":"typed JSON returned on the first rung","oss-winnow-access-trace.lane.registry.name":"Company registry","oss-winnow-access-trace.lane.registry.kind":"authenticated pages","oss-winnow-access-trace.lane.registry.direct":"login boundary returned","oss-winnow-access-trace.lane.registry.session":"named local session reused","oss-winnow-access-trace.lane.dashboard.name":"Public dashboard","oss-winnow-access-trace.lane.dashboard.kind":"dynamically rendered","oss-winnow-access-trace.lane.dashboard.direct":"application shell only","oss-winnow-access-trace.lane.dashboard.session":"no session declared","oss-winnow-access-trace.lane.dashboard.browser":"rendered content extracted","oss-winnow-access-trace.lane.excluded.name":"Excluded domain","oss-winnow-access-trace.lane.excluded.kind":"outside the policy profile","oss-winnow-access-trace.lane.excluded.stop":"policy excludes the domain, stopped before sending","oss-winnow-access-trace.trace.label":"identical trace fields on every path","oss-winnow-access-trace.trace.source":"source","oss-winnow-access-trace.trace.routeAttempted":"route attempted","oss-winnow-access-trace.trace.status":"status","oss-winnow-access-trace.trace.latency":"latency","oss-winnow-access-trace.trace.sessionIdentity":"session identity","oss-winnow-access-trace.trace.selectedRoute":"selected route","oss-winnow-access-trace.trace.stopReason":"stop reason","oss-winnow-access-trace.band.text":"the cheapest permitted route that works wins","oss-winnow-access-trace.band.meta":"an explicit stop remains a valid outcome","oss-winnow-accidental-runtime-banner.eyebrow":"The stack engineers recognise","oss-winnow-accidental-runtime-banner.lead":"Every scraper collection","oss-winnow-accidental-runtime-banner.accent":"becomes a runtime by accident.","oss-winnow-accidental-runtime-banner.para.one":"It begins with a script that fetches one page. Then comes a second parser, a scheduler, retries, a proxy service, a browser pool, separate rate limits, a feed reader, a search wrapper, a deduplication job and a folder of outputs. Each addition is reasonable. Together they become production source infrastructure with no declared boundary and no stable object above the individual sources.","oss-winnow-accidental-runtime-banner.para.two":"Winnow makes that runtime explicit. The question contract sits above the source machinery. Source kinds remain typed. Discovery, access, parsing, extraction, enrichment, evidence, cadence, authority and audit become parts of one run rather than hidden conventions spread across scripts. The result is not fewer real problems. It is one place where the problems are named, composed and operated.","oss-winnow-accidental-runtime-banner.panel.title":"What was already there","oss-winnow-accidental-runtime-banner.panel.tag":"before anyone called it a platform","oss-winnow-accidental-runtime-banner.chip.searchWrappers":"search wrappers","oss-winnow-accidental-runtime-banner.chip.siteScrapers":"site scrapers","oss-winnow-accidental-runtime-banner.chip.apiClients":"API clients","oss-winnow-accidental-runtime-banner.chip.feedReaders":"feed readers","oss-winnow-accidental-runtime-banner.chip.browserPool":"browser pool","oss-winnow-accidental-runtime-banner.chip.proxyHealth":"proxy health","oss-winnow-accidental-runtime-banner.chip.rateLimits":"rate limits","oss-winnow-accidental-runtime-banner.chip.scheduler":"scheduler","oss-winnow-accidental-runtime-banner.chip.deduplication":"deduplication","oss-winnow-accidental-runtime-banner.chip.exports":"exports","oss-winnow-accidental-runtime-banner.chip.logs":"logs","oss-winnow-accidental-runtime-banner.chip.glue":"glue","oss-winnow-accidental-runtime-banner.verdict":"the runtime already existed; Winnow gives it a contract","oss-winnow-accidental-runtime-banner.footline":"the source graph becomes replaceable because the question finally has a name","oss-winnow-adoption-path.kicker.label":"Adoption path","oss-winnow-adoption-path.kicker.sub":"increase posture, not scope by default","oss-winnow-adoption-path.tag":"DEPLOYMENT","oss-winnow-adoption-path.step.begin-prefix":"begin: ","oss-winnow-adoption-path.step.add-prefix":"add when justified: ","oss-winnow-adoption-path.posture.local.name":"Local run","oss-winnow-adoption-path.posture.local.begin":"binary and file output","oss-winnow-adoption-path.posture.local.add":"schedule and retained state","oss-winnow-adoption-path.posture.embedded.name":"Embedded","oss-winnow-adoption-path.posture.embedded.begin":"Rust crates","oss-winnow-adoption-path.posture.embedded.add":"application-specific source work","oss-winnow-adoption-path.posture.service.name":"Shared service","oss-winnow-adoption-path.posture.service.begin":"HTTP deployment","oss-winnow-adoption-path.posture.service.add":"central access and operations","oss-winnow-adoption-path.posture.extended.name":"Extended","oss-winnow-adoption-path.posture.extended.begin":"Python or WebAssembly paths","oss-winnow-adoption-path.posture.extended.add":"analysis or client integration","oss-winnow-adoption-path.posture.distributed.name":"Distributed","oss-winnow-adoption-path.posture.distributed.begin":"coordinator and workers","oss-winnow-adoption-path.posture.distributed.add":"large source and processing graphs","oss-winnow-adoption-path.foot.left":"the deployment grows","oss-winnow-adoption-path.foot.right":"the question contract stays","oss-winnow-after-search.chrome.path":"Search is only the start","oss-winnow-after-search.chrome.status":"4 current offers, sources attached","oss-winnow-after-search.chrome.meta":"illustrative figures, 12 links in, 4 offers out","oss-winnow-after-search.left.head":"After a search, the work is yours","oss-winnow-after-search.left.query":"what does a good rain jacket cost","oss-winnow-after-search.left.countChip":"12 links back","oss-winnow-after-search.left.link1.title":"rain jacket prices, compared","oss-winnow-after-search.left.link1.source":"gearnotes.example","oss-winnow-after-search.left.link2.title":"best rain jackets this year","oss-winnow-after-search.left.link2.source":"walkingweekly.example","oss-winnow-after-search.left.link3.title":"rain jackets under 150 euro","oss-winnow-after-search.left.link3.source":"budgetkit.example","oss-winnow-after-search.left.link4.title":"how waterproof ratings work","oss-winnow-after-search.left.link4.source":"outdooranswers.example","oss-winnow-after-search.left.link5.title":"rain jacket deals this week","oss-winnow-after-search.left.link5.source":"dealspotter.example","oss-winnow-after-search.left.link6.title":"a rain jacket buying guide","oss-winnow-after-search.left.link6.source":"kitguides.example","oss-winnow-after-search.left.moreChip":"plus 6 more to open","oss-winnow-after-search.left.ledgerLabel":"then the work starts","oss-winnow-after-search.left.ledger.tabs.count":"6","oss-winnow-after-search.left.ledger.tabs.label":"tabs opened","oss-winnow-after-search.left.ledger.prices.count":"4","oss-winnow-after-search.left.ledger.prices.label":"prices copied","oss-winnow-after-search.left.ledger.currencies.count":"2","oss-winnow-after-search.left.ledger.currencies.label":"currencies corrected","oss-winnow-after-search.left.ledger.stale.count":"1","oss-winnow-after-search.left.ledger.stale.label":"page out of date","oss-winnow-after-search.right.head":"The same question, carried further","oss-winnow-after-search.right.currency":"EUR","oss-winnow-after-search.right.offer1.price":"€129.00","oss-winnow-after-search.right.offer1.seen":"seen 31 July 2026, northgear.example","oss-winnow-after-search.right.offer2.price":"€114.50","oss-winnow-after-search.right.offer2.seen":"seen 30 July 2026, trailmarket.example","oss-winnow-after-search.right.offer3.price":"€122.95","oss-winnow-after-search.right.offer3.seen":"seen 31 July 2026, hillandfen.example","oss-winnow-after-search.right.offer4.price":"€108.00","oss-winnow-after-search.right.offer4.seen":"seen 29 July 2026, kitfinder.example","oss-winnow-after-search.right.unavailable":"one shop could not be reached this time, shown so you know","oss-winnow-after-search.right.sourceNote":"every source address stays attached, so you can open it yourself","oss-winnow-after-search.band.left":"the hidden steps after search, carried for you","oss-winnow-after-search.band.right":"search stays useful, the legwork goes","oss-winnow-answer-card.kicker.label":"One answer line","oss-winnow-answer-card.kicker.sub":"what can sit behind it","oss-winnow-answer-card.kicker.tag":"Plain","oss-winnow-answer-card.rows.price.answer":"The price changed to €84.95","oss-winnow-answer-card.rows.price.behind":"retailer page, observed time and previous price","oss-winnow-answer-card.rows.rule.answer":"The rule starts on 1 October","oss-winnow-answer-card.rows.rule.behind":"official text and publication date","oss-winnow-answer-card.rows.service.answer":"The service is cancelled","oss-winnow-answer-card.rows.service.behind":"operator notice and live feed","oss-winnow-answer-card.rows.company.answer":"The company filed a new director","oss-winnow-answer-card.rows.company.behind":"register entry and filing date","oss-winnow-answer-card.rows.behindTag":"behind it","oss-winnow-answer-card.foot.left":"clear enough to use","oss-winnow-answer-card.foot.right":"connected enough to inspect","oss-winnow-ask-once.chrome.path":"Ask once, check again","oss-winnow-ask-once.chrome.status":"question held, answer refreshed","oss-winnow-ask-once.chrome.meta":"two sundays, illustrative","oss-winnow-ask-once.question.label":"your question, asked once","oss-winnow-ask-once.question.text":"Which Sunday trains arrive before 10:00?","oss-winnow-ask-once.sources.timetable":"Timetable","oss-winnow-ask-once.sources.operator":"Operator notice","oss-winnow-ask-once.sources.feed":"Disruption feed","oss-winnow-ask-once.run.first.title":"First check","oss-winnow-ask-once.run.first.count":"4 services arrive before 10:00","oss-winnow-ask-once.run.later.title":"A later Sunday","oss-winnow-ask-once.run.later.count":"3 services arrive before 10:00","oss-winnow-ask-once.run.later.cancelled":"cancelled","oss-winnow-ask-once.run.later.cancelledNote":"via the disruption feed","oss-winnow-ask-once.run.later.changed":"changed since your last check","oss-winnow-ask-once.service.a.dep":"07:42","oss-winnow-ask-once.service.a.arr":"08:56","oss-winnow-ask-once.service.b.dep":"08:15","oss-winnow-ask-once.service.b.arr":"09:24","oss-winnow-ask-once.service.c.dep":"08:47","oss-winnow-ask-once.service.c.arr":"09:52","oss-winnow-ask-once.service.d.dep":"09:18","oss-winnow-ask-once.service.d.arr":"09:58","oss-winnow-ask-once.band.left":"the question stays as you asked it","oss-winnow-ask-once.band.right":"the answer keeps itself current","oss-winnow-authority-gate.kicker.label":"Configured agent path","oss-winnow-authority-gate.kicker.sub":"six gates around one action","oss-winnow-authority-gate.tag":"AUTHORITY","oss-winnow-authority-gate.gate.budget.name":"Budget","oss-winnow-authority-gate.gate.budget.question":"is capacity still available?","oss-winnow-authority-gate.gate.budget.states":"continue, warn, throttle, halt","oss-winnow-authority-gate.gate.policy.name":"Policy","oss-winnow-authority-gate.gate.policy.question":"is this action allowed in context?","oss-winnow-authority-gate.gate.policy.states":"allow or deny","oss-winnow-authority-gate.gate.safety.name":"Safety","oss-winnow-authority-gate.gate.safety.question":"does the action violate a hard boundary?","oss-winnow-authority-gate.gate.safety.states":"pass or stop","oss-winnow-authority-gate.gate.approval.name":"Approval","oss-winnow-authority-gate.gate.approval.question":"does a person need to decide?","oss-winnow-authority-gate.gate.approval.states":"approve, reject, escalate, defer","oss-winnow-authority-gate.gate.contract.name":"Contract","oss-winnow-authority-gate.gate.contract.question":"does the output match the required shape?","oss-winnow-authority-gate.gate.contract.states":"accept or reject","oss-winnow-authority-gate.gate.audit.name":"Audit","oss-winnow-authority-gate.gate.audit.question":"what happened and under which context?","oss-winnow-authority-gate.gate.audit.states":"structured entry","oss-winnow-authority-gate.footline.left":"authority is explicit","oss-winnow-authority-gate.footline.right":"failure remains data","oss-winnow-behind-the-answer.foot.left":"the product stays simple","oss-winnow-behind-the-answer.foot.right":"the source method stays inspectable","oss-winnow-behind-the-answer.kicker.label":"What you see","oss-winnow-behind-the-answer.kicker.sub":"what works underneath","oss-winnow-behind-the-answer.kicker.tag":"Plain","oss-winnow-behind-the-answer.pair.1.see":"one question","oss-winnow-behind-the-answer.pair.1.under":"source planning and discovery","oss-winnow-behind-the-answer.pair.2.see":"one tidy account","oss-winnow-behind-the-answer.pair.2.under":"reading, extraction and typing","oss-winnow-behind-the-answer.pair.3.see":"source links","oss-winnow-behind-the-answer.pair.3.under":"source and run context","oss-winnow-behind-the-answer.pair.4.see":"changed since last check","oss-winnow-behind-the-answer.pair.4.under":"recurrence and comparison","oss-winnow-behind-the-answer.pairs.seeLabel":"you see","oss-winnow-behind-the-answer.pairs.underLabel":"handled underneath","oss-winnow-biz-close-banner.eyebrow":"The whole business argument","oss-winnow-biz-close-banner.lead":"Stop repeating the research.","oss-winnow-biz-close-banner.lead-accent":"Make the question run.","oss-winnow-biz-close-banner.paragraph.one":"Winnow turns external source work from a recurring human ritual into an owned operating capability. The question retains why it exists, which source families are acceptable, what result should return, how often it matters and which boundaries apply. Search, scrapers, collectors, crawls, files, feeds and streams become instruments beneath that contract.","oss-winnow-biz-close-banner.paragraph.two":"The result arrives typed and sourced. Disagreement remains visible. Later runs show change rather than another pile. The route and failures remain inspectable. The system starts as one open-source binary and can grow into a shared or distributed deployment when the workload earns it. The organisation owns the logic that decides where the question looks and how the result is assembled.","oss-winnow-biz-close-banner.panel.header":"One question, end to end","oss-winnow-biz-close-banner.panel.tag":"current release evidence","oss-winnow-biz-close-banner.evidence.scrapers.figure":"1,325","oss-winnow-biz-close-banner.evidence.scrapers.label":"site scrapers","oss-winnow-biz-close-banner.evidence.collectors.figure":"325","oss-winnow-biz-close-banner.evidence.collectors.label":"native collectors","oss-winnow-biz-close-banner.evidence.engines.figure":"28","oss-winnow-biz-close-banner.evidence.engines.label":"search engines","oss-winnow-biz-close-banner.evidence.categories.figure":"66","oss-winnow-biz-close-banner.evidence.categories.label":"source categories","oss-winnow-biz-close-banner.evidence.formats.figure":"5","oss-winnow-biz-close-banner.evidence.formats.label":"output formats","oss-winnow-biz-close-banner.evidence.binary.figure":"40 MB","oss-winnow-biz-close-banner.evidence.binary.label":"one binary, approximately","oss-winnow-biz-close-banner.verdict":"choose one question that keeps coming back and make it an operating asset","oss-winnow-biz-close-banner.footline":"the answer belongs to one moment; the question keeps working","oss-winnow-bounded-agent-run.chrome.path":"A bounded agent run","oss-winnow-bounded-agent-run.chrome.status":"one action, six gates, every decision recorded","oss-winnow-bounded-agent-run.chrome.meta":"illustrative","oss-winnow-bounded-agent-run.run.label":"configured agent run","oss-winnow-bounded-agent-run.run.action":"proposed action: read a public register entry","oss-winnow-bounded-agent-run.run.id":"run a-19","oss-winnow-bounded-agent-run.index.aria":"gate index","oss-winnow-bounded-agent-run.gate.budget.name":"Budget","oss-winnow-bounded-agent-run.gate.budget.decision":"continue","oss-winnow-bounded-agent-run.gate.budget.detail":"Consumption sits at 62 percent of the run allowance. The remaining budget covers the proposed register read, so the action continues under normal allocation.","oss-winnow-bounded-agent-run.gate.budget.meter":"62 percent of the allowance used","oss-winnow-bounded-agent-run.gate.policy.name":"Policy","oss-winnow-bounded-agent-run.gate.policy.decision":"allow","oss-winnow-bounded-agent-run.gate.policy.detail":"The host is admitted inside the configured window, so the action proceeds under the declared policy profile.","oss-winnow-bounded-agent-run.gate.safety.name":"Safety","oss-winnow-bounded-agent-run.gate.safety.decision":"stop","oss-winnow-bounded-agent-run.gate.safety.detail":"The register answers with a redirect to an unsafe target. The follow-up request is never opened; the original read stands, the redirect does not.","oss-winnow-bounded-agent-run.gate.approval.name":"Approval","oss-winnow-bounded-agent-run.gate.approval.decision":"paused","oss-winnow-bounded-agent-run.gate.approval.detail":"A second allowed action would open an authenticated source outside the normal profile. The run pauses and waits for a person, with four explicit states.","oss-winnow-bounded-agent-run.gate.approval.state.approve":"approve","oss-winnow-bounded-agent-run.gate.approval.state.reject":"reject","oss-winnow-bounded-agent-run.gate.approval.state.escalate":"escalate","oss-winnow-bounded-agent-run.gate.approval.state.defer":"defer","oss-winnow-bounded-agent-run.gate.contract.name":"Contract","oss-winnow-bounded-agent-run.gate.contract.decision":"accept","oss-winnow-bounded-agent-run.gate.contract.detail":"The returned fields, cardinality and evidence state match the output contract the caller declared, so the result is accepted rather than merely received.","oss-winnow-bounded-agent-run.gate.audit.name":"Audit","oss-winnow-bounded-agent-run.gate.audit.decision":"entry written","oss-winnow-bounded-agent-run.gate.audit.detail":"Every gate decision receives a structured entry with actor, session, parent, duration, success and error context.","oss-winnow-bounded-agent-run.gate.audit.field.actor.label":"actor","oss-winnow-bounded-agent-run.gate.audit.field.actor.value":"agent run a-19","oss-winnow-bounded-agent-run.gate.audit.field.session.label":"session","oss-winnow-bounded-agent-run.gate.audit.field.session.value":"s-0842","oss-winnow-bounded-agent-run.gate.audit.field.parent.label":"parent","oss-winnow-bounded-agent-run.gate.audit.field.parent.value":"question q-0842","oss-winnow-bounded-agent-run.gate.audit.field.duration.label":"duration","oss-winnow-bounded-agent-run.gate.audit.field.duration.value":"412 ms","oss-winnow-bounded-agent-run.gate.audit.field.outcome.label":"outcome","oss-winnow-bounded-agent-run.gate.audit.field.outcome.value":"admitted path succeeded","oss-winnow-bounded-agent-run.gate.audit.field.error.label":"error context","oss-winnow-bounded-agent-run.gate.audit.field.error.value":"refused redirect recorded on the safety decision","oss-winnow-bounded-agent-run.error.label":"error chain, a different source","oss-winnow-bounded-agent-run.error.step.timeout":"direct timeout","oss-winnow-bounded-agent-run.error.step.fallback":"browser fallback unavailable","oss-winnow-bounded-agent-run.error.step.budget":"retry budget exhausted","oss-winnow-bounded-agent-run.error.final":"source unavailable","oss-winnow-bounded-agent-run.error.note":"The typed classification keeps a failed source distinct from an empty result.","oss-winnow-bounded-agent-run.band.text":"authority is composed around the action, not implied by it","oss-winnow-bounded-agent-run.band.meta":"failure remains data","oss-winnow-bounded-crawler.chrome.path":"A crawl with boundaries","oss-winnow-bounded-crawler.chrome.status":"budget reached, frontier retained","oss-winnow-bounded-crawler.chrome.meta":"SAFE RANGES","oss-winnow-bounded-crawler.node.seed.path":"documentation seed","oss-winnow-bounded-crawler.node.seed.chip":"origin declared","oss-winnow-bounded-crawler.rule.include":"include rule admits","oss-winnow-bounded-crawler.rule.content":"content rule refuses","oss-winnow-bounded-crawler.rule.outsideInclude":"outside the include rule","oss-winnow-bounded-crawler.rule.exclude":"exclude rule drops","oss-winnow-bounded-crawler.state.fetched":"fetched","oss-winnow-bounded-crawler.state.priority":"priority pulls ahead","oss-winnow-bounded-crawler.node.media.note":"over the declared content size limit","oss-winnow-bounded-crawler.node.regulatory.note":"newly published","oss-winnow-bounded-crawler.budget.head":"page budget reached","oss-winnow-bounded-crawler.budget.label":"frontier retained","oss-winnow-bounded-crawler.budget.note":"Two valid URLs remain discovered but unfetched. Bounded completion is not an empty frontier.","oss-winnow-bounded-crawler.safety.head":"safety boundary","oss-winnow-bounded-crawler.safety.link":"link-local address","oss-winnow-bounded-crawler.safety.stop":"stopped before the request lane","oss-winnow-bounded-crawler.safety.note":"Loopback, private and link-local destinations are refused before a request opens.","oss-winnow-bounded-crawler.inset.head":"strategy changes order, not scope","oss-winnow-bounded-crawler.inset.priority":"priority traversal","oss-winnow-bounded-crawler.inset.bfs":"breadth first","oss-winnow-bounded-crawler.inset.page.regulatory":"regulatory update","oss-winnow-bounded-crawler.inset.page.products":"products","oss-winnow-bounded-crawler.inset.page.legal":"legal","oss-winnow-bounded-crawler.inset.page.guide":"guide","oss-winnow-bounded-crawler.inset.page.terms":"terms","oss-winnow-bounded-crawler.inset.note":"The same five fetched pages appear in both readings.","oss-winnow-bounded-crawler.band.text":"an incomplete crawl must not look like a complete scan","oss-winnow-bounded-crawler.band.meta":"the frontier is data","oss-winnow-business-claim-state.kicker.label":"What the review sees","oss-winnow-business-claim-state.kicker.sub":"not just the winning sentence","oss-winnow-business-claim-state.tag":"EVIDENCE","oss-winnow-business-claim-state.signal.independent.name":"Independent support","oss-winnow-business-claim-state.signal.independent.why":"separate origins strengthen the case","oss-winnow-business-claim-state.signal.independent.state":"supporting edges","oss-winnow-business-claim-state.signal.copied.name":"Copied support","oss-winnow-business-claim-state.signal.copied.why":"several pages may be one source","oss-winnow-business-claim-state.signal.copied.state":"derived relationship","oss-winnow-business-claim-state.signal.contradiction.name":"Contradiction","oss-winnow-business-claim-state.signal.contradiction.why":"a material alternative remains","oss-winnow-business-claim-state.signal.contradiction.state":"mixed or contradicted","oss-winnow-business-claim-state.signal.missing.name":"Missing source","oss-winnow-business-claim-state.signal.missing.why":"the question is not settled","oss-winnow-business-claim-state.signal.missing.state":"insufficient or unresolved","oss-winnow-business-claim-state.foot.left":"uncertainty remains actionable","oss-winnow-business-claim-state.foot.right":"kept in the open","oss-winnow-business-disagreement.chrome.path":"Disagreement stays visible","oss-winnow-business-disagreement.chrome.status":"mixed, kept visible","oss-winnow-business-disagreement.chrome.meta":"illustrative","oss-winnow-business-disagreement.claim.label":"the claim","oss-winnow-business-disagreement.claim.text":"The supplier discontinued component X","oss-winnow-business-disagreement.edge.supports":"supports","oss-winnow-business-disagreement.edge.contradicts":"contradicts","oss-winnow-business-disagreement.node.notice.name":"official product notice","oss-winnow-business-disagreement.node.notice.meta":"published 2026-06-30","oss-winnow-business-disagreement.node.feed.name":"distributor catalogue feed","oss-winnow-business-disagreement.node.feed.meta":"change observed 2026-07-02","oss-winnow-business-disagreement.node.wire.name":"one wire report","oss-winnow-business-disagreement.node.wire.meta":"the shared origin","oss-winnow-business-disagreement.node.wire.copy":"news copy","oss-winnow-business-disagreement.node.wire.note":"derived: counts as one source","oss-winnow-business-disagreement.node.page.name":"supplier product page","oss-winnow-business-disagreement.node.page.meta":"still lists component X","oss-winnow-business-disagreement.node.page.freshness":"last updated: unknown","oss-winnow-business-disagreement.review.label":"review card","oss-winnow-business-disagreement.review.state":"mixed","oss-winnow-business-disagreement.review.question":"Is the product page stale, or is the discontinuation regional?","oss-winnow-business-disagreement.summary.label":"generated summary","oss-winnow-business-disagreement.summary.text":"Two independent sources support the discontinuation. One current listing contradicts it.","oss-winnow-business-disagreement.summary.unresolved":"unresolved: product page freshness unknown","oss-winnow-business-disagreement.summary.link.notice":"official notice","oss-winnow-business-disagreement.summary.link.feed":"distributor feed","oss-winnow-business-disagreement.summary.link.wire":"wire report","oss-winnow-business-disagreement.summary.link.page":"product page","oss-winnow-business-disagreement.band.left":"support and contradiction stay on the record","oss-winnow-business-disagreement.band.right":"mixed is a working state","oss-winnow-business-glyph.a4a30cb334":"Route recorded","oss-winnow-business-glyph.35a0ab3b85":"Question in, typed results out","oss-winnow-business-glyph.9e0fe7c551":"Polite collection by default","oss-winnow-business-glyph.d1d450cb18":"JSON, CSV, or stream","oss-winnow-business-glyph.db6e7e4104":"Output","oss-winnow-business-glyph.305c10596f":"Search, scrape, crawl","oss-winnow-business-glyph.bf6f5a8b28":"Modes","oss-winnow-business-glyph.6eef664840":"One repeatable run","oss-winnow-business-glyph.bf5dde2d06":"Route","oss-winnow-business-glyph.4a1fca6ade":"A governed collection run","oss-winnow-business-glyph.ac4bbe17fe":"Winnow","oss-winnow-business-glyph.ab9f490517":"One collection route","oss-winnow-business-glyph.6d3ba5249a":"normalise","oss-winnow-business-glyph.ebefee2070":"Different surfaces, one question","oss-winnow-business-glyph.208e94201f":"Input surfaces","oss-winnow-business-glyph.6b5eb5323e":"1,325 scrapers","oss-winnow-business-glyph.530fa9bf1c":"Collection route","oss-winnow-business-glyph.6e0bb577e9":"Categories","oss-winnow-business-glyph.808d7dca8a":"66","oss-winnow-business-glyph.50086834de":"Scrapers","oss-winnow-business-glyph.e7c9aab368":"1,325","oss-winnow-business-glyph.a9243f87cf":"Recorded run","oss-winnow-business-glyph.61752f9a93":"1","oss-winnow-business-glyph.b2033ee429":"local imports","oss-winnow-business-glyph.58dd06369e":"Files","oss-winnow-business-glyph.80c7912cd1":"structured responses","oss-winnow-business-glyph.235fd89e60":"APIs","oss-winnow-business-glyph.0cdeb47a93":"polite fetching","oss-winnow-business-glyph.fcbab360fe":"Websites","oss-winnow-business-glyph.2040ba67bb":"ranked discovery","oss-winnow-business-glyph.baf101d207":"Search engines","oss-winnow-business-glyph.b2c3de1245":"scheduled updates","oss-winnow-business-glyph.7d90748c8b":"Feeds","oss-winnow-business-question-contract.kicker.label":"Question as an asset","oss-winnow-business-question-contract.kicker.sub":"what can be governed","oss-winnow-business-question-contract.tag":"CONTRACT","oss-winnow-business-question-contract.field.objective.name":"Objective","oss-winnow-business-question-contract.field.objective.meaning":"why the operation exists","oss-winnow-business-question-contract.field.objective.example":"supplier material-risk changes","oss-winnow-business-question-contract.field.source-boundary.name":"Source boundary","oss-winnow-business-question-contract.field.source-boundary.meaning":"where the operation may look","oss-winnow-business-question-contract.field.source-boundary.example":"official, industry and selected news","oss-winnow-business-question-contract.field.output-contract.name":"Output contract","oss-winnow-business-question-contract.field.output-contract.meaning":"what downstream work receives","oss-winnow-business-question-contract.field.output-contract.example":"change, date, source, state","oss-winnow-business-question-contract.field.cadence.name":"Cadence","oss-winnow-business-question-contract.field.cadence.meaning":"when freshness matters","oss-winnow-business-question-contract.field.cadence.example":"daily with immediate feed updates","oss-winnow-business-question-contract.field.authority.name":"Authority","oss-winnow-business-question-contract.field.authority.meaning":"what requires review","oss-winnow-business-question-contract.field.authority.example":"authenticated or disputed sources","oss-winnow-business-question-contract.footline.left":"the source graph is current implementation","oss-winnow-business-question-contract.footline.right":"not permanent architecture","oss-winnow-business-receipt.chrome.path":"A reviewable run receipt","oss-winnow-business-receipt.chrome.status":"receipt complete, one review open","oss-winnow-business-receipt.chrome.meta":"illustrative","oss-winnow-business-receipt.stage.plan.name":"query plan","oss-winnow-business-receipt.stage.plan.detail":"legal and official-source subqueries","oss-winnow-business-receipt.stage.discovery.name":"discovery","oss-winnow-business-receipt.stage.discovery.detail":"engines attempted and counted","oss-winnow-business-receipt.stage.mapping.name":"source mapping","oss-winnow-business-receipt.stage.mapping.detail":"one maintained scraper, one file collector","oss-winnow-business-receipt.stage.access.name":"access trace","oss-winnow-business-receipt.stage.access.detail":"direct success, one rate deferral","oss-winnow-business-receipt.stage.extraction.name":"extraction","oss-winnow-business-receipt.stage.extraction.detail":"typed obligations emitted","oss-winnow-business-receipt.stage.review.name":"review trigger","oss-winnow-business-receipt.stage.review.detail":"unresolved contradiction handed to a person","oss-winnow-business-receipt.stage.review.chip":"human review","oss-winnow-business-receipt.stage.record.name":"final record","oss-winnow-business-receipt.stage.record.detail":"every obligation linked to source and run context","oss-winnow-business-receipt.empty.label":"apparent empty result","oss-winnow-business-receipt.empty.count":"0 records","oss-winnow-business-receipt.empty.state":"source unavailable","oss-winnow-business-receipt.empty.note":"Typed failure keeps the missed source visible, so an empty run can never read as no regulatory change.","oss-winnow-business-receipt.band.left":"what the system did, recorded","oss-winnow-business-receipt.band.right":"the receipt explains the result","oss-winnow-business-run-receipt.kicker.label":"What can be reviewed","oss-winnow-business-run-receipt.kicker.sub":"one run, one route","oss-winnow-business-run-receipt.tag":"RECEIPT","oss-winnow-business-run-receipt.area.discovery.question":"Where did the source come from?","oss-winnow-business-run-receipt.area.discovery.name":"Discovery","oss-winnow-business-run-receipt.area.discovery.example":"engines and result counts","oss-winnow-business-run-receipt.area.access.question":"How was it reached?","oss-winnow-business-run-receipt.area.access.name":"Access","oss-winnow-business-run-receipt.area.access.example":"chosen route and refusal state","oss-winnow-business-run-receipt.area.extraction.question":"How was the record formed?","oss-winnow-business-run-receipt.area.extraction.name":"Extraction","oss-winnow-business-run-receipt.area.extraction.example":"scraper, collector and fields","oss-winnow-business-run-receipt.area.authority.question":"What was the run allowed to do?","oss-winnow-business-run-receipt.area.authority.name":"Authority","oss-winnow-business-run-receipt.area.authority.example":"policy, approval and budget events","oss-winnow-business-run-receipt.area.failure.question":"Was empty really empty?","oss-winnow-business-run-receipt.area.failure.name":"Failure","oss-winnow-business-run-receipt.area.failure.example":"typed error and retries","oss-winnow-business-run-receipt.foot.left":"inspect the method","oss-winnow-business-run-receipt.foot.right":"a record of what ran","oss-winnow-business-source-graph.kicker.label":"Supplier risk","oss-winnow-business-source-graph.kicker.sub":"one question, five source forms","oss-winnow-business-source-graph.tag":"SOURCE GRAPH","oss-winnow-business-source-graph.question":"Which suppliers published a material risk change?","oss-winnow-business-source-graph.form.search.name":"Search","oss-winnow-business-source-graph.form.search.contribution":"find newly relevant sources","oss-winnow-business-source-graph.form.search.shape":"candidate URLs","oss-winnow-business-source-graph.form.register-scraper.name":"Register scraper","oss-winnow-business-source-graph.form.register-scraper.contribution":"legal entity and filings","oss-winnow-business-source-graph.form.register-scraper.shape":"typed corporate record","oss-winnow-business-source-graph.form.sanctions-collector.name":"Sanctions collector","oss-winnow-business-source-graph.form.sanctions-collector.contribution":"structured list changes","oss-winnow-business-source-graph.form.sanctions-collector.shape":"matched entries","oss-winnow-business-source-graph.form.news-feed.name":"News feed","oss-winnow-business-source-graph.form.news-feed.contribution":"fresh operational signals","oss-winnow-business-source-graph.form.news-feed.shape":"dated events","oss-winnow-business-source-graph.form.published-file.name":"Published file","oss-winnow-business-source-graph.form.published-file.contribution":"official report or statement","oss-winnow-business-source-graph.form.published-file.shape":"document reference and extracted fields","oss-winnow-business-source-graph.footline.left":"different source contracts","oss-winnow-business-source-graph.footline.right":"one business output","oss-winnow-catalog.scraperUnit":"scrapers","oss-winnow-catalog.8353a4973f":"one output contract","oss-winnow-catalog.f759e679b1":"Each scraper is a typed Rust struct. Custom scrapers drop in beside the built-ins.","oss-winnow-catalog.cba53c30d5":"17 more categories: GIS, Ecommerce, Transportation, Jobs, Sports, and the long tail.","oss-winnow-catalog.e53163559a":"same output shape","oss-winnow-catalog.91b261a181":"66 categories","oss-winnow-catalog.5c9cb498f5":"Government","oss-winnow-catalog.6865786a1f":"Law jurisdictions","oss-winnow-catalog.5a5a8c0175":"Native collectors","oss-winnow-catalog.542c20e999":"Search engines","oss-winnow-catalog.f042372fde":"Site scrapers","oss-winnow-catalog.0b769876d1":"Company registries: Companies House, KvK, OpenCorporates, EUR-Lex.","oss-winnow-catalog.1029544ae8":"Directories","oss-winnow-catalog.04b716cbfd":"CKAN and Socrata portals, national statistics offices, EU data portals.","oss-winnow-catalog.bea66ea26e":"Open data","oss-winnow-catalog.269361bd8e":"Yahoo Finance, exchanges, central bank data, economic indicators.","oss-winnow-catalog.1b48d3f014":"Finance","oss-winnow-catalog.baed7c1812":"NOAA, USGS water, Copernicus climate, air quality, biodiversity.","oss-winnow-catalog.d443a11855":"Environment","oss-winnow-catalog.19c0c4336f":"Censys, Shodan, RIPE BGP, DNS, internet measurement archives.","oss-winnow-catalog.e931cb5b03":"Networks","oss-winnow-catalog.4eb4f006ad":"CDC, PubMed, clinical trials, drug databases, WHO indicators.","oss-winnow-catalog.3703cd2168":"Health","oss-winnow-catalog.7348376871":"International, regional, and trade press across many languages.","oss-winnow-catalog.34c808d0a6":"News","oss-winnow-catalog.6a921d57de":"Hugging Face, Papers with Code, Kaggle, UCI, and benchmark datasets.","oss-winnow-catalog.a0c38ecfa7":"Machine learning","oss-winnow-catalog.927d9ddacf":"Genomics, astronomy, climate, physics, materials, neuroscience repositories.","oss-winnow-catalog.d2d0663714":"Science","oss-winnow-catalog.4f58faa488":"Statistical agencies, open data catalogs, legislative databases worldwide.","oss-winnow-claim-state.kicker.label":"One claim","oss-winnow-claim-state.kicker.sub":"what the graph can say","oss-winnow-claim-state.tag":"EVIDENCE","oss-winnow-claim-state.status.supported.name":"Supported","oss-winnow-claim-state.status.supported.meaning":"material supports the claim under the current method","oss-winnow-claim-state.status.supported.visibility":"sources and edges","oss-winnow-claim-state.status.contradicted.name":"Contradicted","oss-winnow-claim-state.status.contradicted.meaning":"material directly opposes it","oss-winnow-claim-state.status.contradicted.visibility":"both propositions","oss-winnow-claim-state.status.mixed.name":"Mixed","oss-winnow-claim-state.status.mixed.meaning":"support and contradiction coexist","oss-winnow-claim-state.status.mixed.visibility":"independence and timing","oss-winnow-claim-state.status.insufficient.name":"Insufficient","oss-winnow-claim-state.status.insufficient.meaning":"not enough material to settle it","oss-winnow-claim-state.status.insufficient.visibility":"what remains missing","oss-winnow-claim-state.footline.left":"evidence is inspectable","oss-winnow-claim-state.footline.right":"not promoted into truth by presentation","oss-winnow-consumer-glyph.10fc3853d2":"Nothing to set up","oss-winnow-consumer-glyph.12df5bb228":"Yours to keep","oss-winnow-consumer-glyph.8019c911e8":"a neat list","oss-winnow-consumer-glyph.3cd4a225ca":"What it brought back","oss-winnow-consumer-glyph.adb3bfaa65":"Your assistant","oss-winnow-consumer-glyph.d296250198":"You ask in plain words","oss-winnow-consumer-glyph.533f927d2b":"from the council","oss-winnow-consumer-glyph.8e1fbeeac1":"The notice about the road","oss-winnow-consumer-glyph.fa8ae852b0":"from each shop","oss-winnow-consumer-glyph.c7cba7548e":"The price in three shops","oss-winnow-consumer-glyph.aa9ac27906":"from the town page","oss-winnow-consumer-glyph.4f6b7963a9":"The opening hours you asked for","oss-winnow-consumer-glyph.4b0f911f6c":"Times","oss-winnow-consumer-glyph.e94865d460":"Notices","oss-winnow-consumer-glyph.3f6ef31cfa":"Prices","oss-winnow-consumer-glyph.34c808d0a6":"News","oss-winnow-cost-ledger.recurring":"recurring","oss-winnow-cost-ledger.24b2bb6431":"Source-specific scrapers","oss-winnow-cost-ledger.931c634db8":"Selectors and parsing rules drift when a page changes.","oss-winnow-cost-ledger.7e6c033bec":"Page drift","oss-winnow-cost-ledger.f96f2c2dfa":"Browser automation","oss-winnow-cost-ledger.ff682e972f":"Dynamic pages need a controlled browser runtime and observable retries.","oss-winnow-cost-ledger.66fcaae93a":"Runtime","oss-winnow-cost-ledger.37b5958806":"Network routing","oss-winnow-cost-ledger.7ae86cf6ce":"Some sources need regional exits, stable sessions, or bounded rotation.","oss-winnow-cost-ledger.3f0b06b845":"Network policy","oss-winnow-cost-ledger.9d1addd9a9":"Search connectors","oss-winnow-cost-ledger.5ceb2ea953":"Each engine has its own query shape, limits, and result fields.","oss-winnow-cost-ledger.b911ddc3ae":"Discovery","oss-winnow-cost-ledger.48d1c58ac7":"Glue and scheduling","oss-winnow-cost-ledger.a9b44eae5f":"Retries, queues, parsing, output, and run state must agree.","oss-winnow-cost-ledger.9b7419af35":"Coordination","oss-winnow-cost-ledger.08821d5f75":"One route, recorded","oss-winnow-cost-ledger.6753087f69":"Winnow coordinates the five layers under one run definition and keeps the route beside the results.","oss-winnow-cost-ledger.6a5d2853c2":"One thing to operate","oss-winnow-cost-ledger.f700f8f197":"Patch one route, observe one run, and reuse one output contract.","oss-winnow-cost-ledger.df8ea7848b":"Repeatable by design","oss-winnow-cost-ledger.cf86f6d643":"The same question can run again with the same stages, policies, and output shape.","oss-winnow-cost-ledger.01f1679279":"collection stack","oss-winnow-cost-ledger.1f4843c9b5":"Five moving parts behind a recurring collection job","oss-winnow-cost-ledger.4812c6cbb8":"One governed Winnow route","oss-winnow-cost-ledger.dc62a7b23f":"Search, browse, fetch, parse, and output under one recorded run.","oss-winnow-cost-ledger.d700a7568c":"One run record","oss-winnow-cost-ledger.e69255fee4":"Deployment and infrastructure remain explicit operational choices.","oss-winnow-cost-ledger.6b5eb5323e":"Search, scrape, and crawl together","oss-winnow-crawl-config.kicker.label":"Crawl contract","oss-winnow-crawl-config.kicker.sub":"limits before traversal","oss-winnow-crawl-config.tag":"CRAWL","oss-winnow-crawl-config.col.dimension":"dimension","oss-winnow-crawl-config.col.examples":"examples","oss-winnow-crawl-config.col.outcome":"at the boundary","oss-winnow-crawl-config.row.scope.dimension":"Scope","oss-winnow-crawl-config.row.scope.examples":"origin, subdomains, path patterns","oss-winnow-crawl-config.row.scope.outcome":"URL excluded","oss-winnow-crawl-config.row.work.dimension":"Work","oss-winnow-crawl-config.row.work.examples":"depth, pages, concurrency","oss-winnow-crawl-config.row.work.outcome":"frontier retained or stopped","oss-winnow-crawl-config.row.content.dimension":"Content","oss-winnow-crawl-config.row.content.examples":"type and size limits","oss-winnow-crawl-config.row.content.outcome":"response classified or refused","oss-winnow-crawl-config.row.safety.dimension":"Safety","oss-winnow-crawl-config.row.safety.examples":"private address and source rules","oss-winnow-crawl-config.row.safety.outcome":"request never opened","oss-winnow-crawl-config.foot.left":"the graph may grow","oss-winnow-crawl-config.foot.right":"the contract does not","oss-winnow-different-places.chrome.path":"Five sources, one account","oss-winnow-different-places.chrome.status":"four places answered, one still pending","oss-winnow-different-places.chrome.meta":"five sources, illustrative","oss-winnow-different-places.question.text":"Has the river come over the lower path?","oss-winnow-different-places.sources.river.name":"river-level feed","oss-winnow-different-places.sources.weather.name":"weather warning page","oss-winnow-different-places.sources.council.name":"council notice","oss-winnow-different-places.sources.council.state":"still watching","oss-winnow-different-places.sources.roads.name":"road-closure dataset","oss-winnow-different-places.sources.buses.name":"live transport stream","oss-winnow-different-places.account.title":"one account for this place","oss-winnow-different-places.account.river.label":"river feed","oss-winnow-different-places.account.river.text":"level 1.8 m, steady since dawn","oss-winnow-different-places.account.weather.label":"weather page","oss-winnow-different-places.account.weather.text":"rain easing by this evening","oss-winnow-different-places.account.council.label":"council page","oss-winnow-different-places.account.council.text":"no new notice yet, still watching","oss-winnow-different-places.account.roads.label":"road data","oss-winnow-different-places.account.roads.text":"Mill Lane closed at the ford","oss-winnow-different-places.account.buses.label":"bus stream","oss-winnow-different-places.account.buses.text":"route 4 diverted over the bridge","oss-winnow-different-places.band.left":"different places, one plain account","oss-winnow-different-places.band.right":"every line keeps its source","oss-winnow-discovery-fanout.chrome.path":"Search becomes a shortlist","oss-winnow-discovery-fanout.chrome.status":"engines execute outside the registry lock","oss-winnow-discovery-fanout.chrome.meta":"illustrative","oss-winnow-discovery-fanout.question.kicker":"the question","oss-winnow-discovery-fanout.question.text":"Which new studies challenge the claimed efficiency of direct air capture?","oss-winnow-discovery-fanout.sub.title":"three dependent subqueries","oss-winnow-discovery-fanout.sub.studies":"recent peer-reviewed studies","oss-winnow-discovery-fanout.sub.reports":"official project performance reports","oss-winnow-discovery-fanout.sub.analyses":"critical technical analyses","oss-winnow-discovery-fanout.lock.title":"28-engine registry","oss-winnow-discovery-fanout.lock.note":"Handles are cloned under the read lock, then the lock is released before asynchronous work begins.","oss-winnow-discovery-fanout.engine.academic":"academic engine","oss-winnow-discovery-fanout.engine.general":"general web engine","oss-winnow-discovery-fanout.engine.legal":"legal engine","oss-winnow-discovery-fanout.engine.specialist":"specialist engine","oss-winnow-discovery-fanout.engine.news":"news engine","oss-winnow-discovery-fanout.engine.academicTwo":"second academic engine","oss-winnow-discovery-fanout.receipt.studiesAcademic":"14 candidates, 640 ms","oss-winnow-discovery-fanout.receipt.reportsGeneral":"6 candidates, 720 ms","oss-winnow-discovery-fanout.receipt.analysesSpecialist":"4 candidates, 580 ms","oss-winnow-discovery-fanout.outcome.success":"success","oss-winnow-discovery-fanout.outcome.empty":"no candidates","oss-winnow-discovery-fanout.outcome.timeout":"timed out","oss-winnow-discovery-fanout.outcome.disabled":"temporarily disabled","oss-winnow-discovery-fanout.outcome.ratelimited":"rate limited","oss-winnow-discovery-fanout.dedupe.title":"normalise and deduplicate","oss-winnow-discovery-fanout.dedupe.copies":"3 syndicated copies","oss-winnow-discovery-fanout.dedupe.collapse":"one kept URL","oss-winnow-discovery-fanout.dedupe.remain":"Distinct sources remain.","oss-winnow-discovery-fanout.shortlist.title":"source shortlist","oss-winnow-discovery-fanout.shortlist.study.kind":"Peer-reviewed study page","oss-winnow-discovery-fanout.shortlist.study.provenance":"academic engine","oss-winnow-discovery-fanout.shortlist.study.score":"recency, citations","oss-winnow-discovery-fanout.shortlist.study.next":"maintained scraper","oss-winnow-discovery-fanout.shortlist.report.kind":"Project performance report","oss-winnow-discovery-fanout.shortlist.report.provenance":"general web engine","oss-winnow-discovery-fanout.shortlist.report.score":"authority, freshness","oss-winnow-discovery-fanout.shortlist.report.next":"direct file","oss-winnow-discovery-fanout.shortlist.analysis.kind":"Critical technical analysis","oss-winnow-discovery-fanout.shortlist.analysis.provenance":"specialist engine","oss-winnow-discovery-fanout.shortlist.analysis.score":"relevance, independence","oss-winnow-discovery-fanout.shortlist.analysis.next":"generic page","oss-winnow-discovery-fanout.shortlist.dataset.kind":"Performance dataset","oss-winnow-discovery-fanout.shortlist.dataset.provenance":"general web engine","oss-winnow-discovery-fanout.shortlist.dataset.score":"structure, coverage","oss-winnow-discovery-fanout.shortlist.dataset.next":"dataset","oss-winnow-discovery-fanout.band.left":"search finds possible doors","oss-winnow-discovery-fanout.band.right":"the run continues through them","oss-winnow-discovery-trace.kicker.label":"One discovery run","oss-winnow-discovery-trace.kicker.sub":"every engine keeps its outcome","oss-winnow-discovery-trace.tag":"DISCOVERY","oss-winnow-discovery-trace.stage.plan.name":"Plan","oss-winnow-discovery-trace.stage.plan.body":"Recognise the query shape and produce dependent subqueries.","oss-winnow-discovery-trace.stage.route.name":"Route","oss-winnow-discovery-trace.stage.route.body":"Select suitable general, academic, legal, news or specialist engines.","oss-winnow-discovery-trace.stage.execute.name":"Execute","oss-winnow-discovery-trace.stage.execute.body":"Run independently with timeout, retry and temporary-disable state.","oss-winnow-discovery-trace.stage.blend.name":"Blend","oss-winnow-discovery-trace.stage.blend.body":"Normalise URLs, remove duplicates, score and rank candidates.","oss-winnow-discovery-trace.foot.left":"search returns doors","oss-winnow-discovery-trace.foot.right":"not the final room","oss-winnow-distributed-run.chrome.path":"One question, three deployments","oss-winnow-distributed-run.chrome.status":"one question ID, three postures","oss-winnow-distributed-run.chrome.meta":"question identity constant","oss-winnow-distributed-run.question.text":"the question and its output contract travel unchanged","oss-winnow-distributed-run.question.id":"question q-0842","oss-winnow-distributed-run.posture.cli.name":"CLI","oss-winnow-distributed-run.posture.cli.scope":"one binary, one machine","oss-winnow-distributed-run.posture.cli.readout":"One command on one machine. The question compiles, runs and writes its result through a single binary, and the run receipt lives beside the output file.","oss-winnow-distributed-run.posture.http.name":"HTTP","oss-winnow-distributed-run.posture.http.scope":"a shared internal service","oss-winnow-distributed-run.posture.http.readout":"The same question ID behind a shared internal service. Authentication, body limits, request timeouts, logging and service rate policy wrap the service calls; the question contract underneath is unchanged.","oss-winnow-distributed-run.posture.distributed.name":"Distributed","oss-winnow-distributed-run.posture.distributed.scope":"coordinator and workers","oss-winnow-distributed-run.posture.distributed.readout":"The same question ID split across a coordinator and workers. Tasks carry question and run identity, retry count, deadline and output contract. Results return with their source task IDs and merge under the question.","oss-winnow-distributed-run.cli.binary":"Winnow binary","oss-winnow-distributed-run.cli.binarySub":"one process, the whole run on this machine","oss-winnow-distributed-run.cli.output":"Output file","oss-winnow-distributed-run.cli.outputSub":"one of five formats, written to disk","oss-winnow-distributed-run.http.app":"Internal application","oss-winnow-distributed-run.http.appSub":"calls the service over HTTP","oss-winnow-distributed-run.http.service":"Winnow HTTP service","oss-winnow-distributed-run.http.response":"Typed response","oss-winnow-distributed-run.http.responseSub":"the same result contract, returned to the application","oss-winnow-distributed-run.middleware.auth":"authentication","oss-winnow-distributed-run.middleware.bodyLimits":"body limits","oss-winnow-distributed-run.middleware.timeouts":"request timeouts","oss-winnow-distributed-run.middleware.logging":"logging","oss-winnow-distributed-run.middleware.ratePolicy":"service rate policy","oss-winnow-distributed-run.dist.coordinator":"coordinator","oss-winnow-distributed-run.dist.deferred":"deferred, domain rate state","oss-winnow-distributed-run.dist.workerOne":"scraper worker 1","oss-winnow-distributed-run.dist.workerTwo":"scraper worker 2","oss-winnow-distributed-run.dist.workerThree":"scraper worker 3","oss-winnow-distributed-run.dist.processorOne":"processor 1","oss-winnow-distributed-run.dist.processorTwo":"processor 2","oss-winnow-distributed-run.dist.timedOut":"timed out","oss-winnow-distributed-run.dist.retry":"s-2 retried here","oss-winnow-distributed-run.dist.retried":"retried","oss-winnow-distributed-run.dist.awaiting":"next eligible task","oss-winnow-distributed-run.dist.merge":"results return with their source task IDs and merge into one typed output contract","oss-winnow-distributed-run.dist.receipt":"run receipt: worker, source, access path, parser or collector, merge outcome","oss-winnow-distributed-run.formats.label":"output formats","oss-winnow-distributed-run.format.text":"text","oss-winnow-distributed-run.format.json":"JSON","oss-winnow-distributed-run.format.jsonl":"JSONL","oss-winnow-distributed-run.format.csv":"CSV","oss-winnow-distributed-run.format.html":"HTML","oss-winnow-distributed-run.evidence":"release evidence: 1,325 site scrapers, 325 native collectors, 28 search engines, 66 source categories","oss-winnow-distributed-run.band.text":"deployment decides the machinery, the question keeps its identity","oss-winnow-distributed-run.band.meta":"the contract outlives the posture","oss-winnow-economic-stack.chrome.path":"One runtime, many routes","oss-winnow-economic-stack.chrome.status":"one owned runtime","oss-winnow-economic-stack.chrome.meta":"open source, apache-2.0","oss-winnow-economic-stack.stack.label":"the accidental stack","oss-winnow-economic-stack.stack.search.name":"search APIs","oss-winnow-economic-stack.stack.search.line":"supplier","oss-winnow-economic-stack.stack.scripts.name":"per-site scripts","oss-winnow-economic-stack.stack.scripts.line":"owner","oss-winnow-economic-stack.stack.browser.name":"browser automation","oss-winnow-economic-stack.stack.browser.line":"supplier","oss-winnow-economic-stack.stack.proxy.name":"proxy rotation","oss-winnow-economic-stack.stack.proxy.line":"supplier","oss-winnow-economic-stack.stack.feeds.name":"feed services","oss-winnow-economic-stack.stack.feeds.line":"supplier","oss-winnow-economic-stack.stack.scheduler.name":"scheduler","oss-winnow-economic-stack.stack.scheduler.line":"owner","oss-winnow-economic-stack.stack.dedup.name":"deduplication","oss-winnow-economic-stack.stack.dedup.line":"owner","oss-winnow-economic-stack.stack.exports.name":"data exports","oss-winnow-economic-stack.stack.exports.line":"owner","oss-winnow-economic-stack.stack.logging.name":"logging glue","oss-winnow-economic-stack.stack.logging.line":"owner","oss-winnow-economic-stack.runtime.label":"one owned runtime","oss-winnow-economic-stack.runtime.name":"Winnow","oss-winnow-economic-stack.runtime.licence":"open source, Apache-2.0","oss-winnow-economic-stack.runtime.infra":"operator-controlled infrastructure","oss-winnow-economic-stack.outside.browser":"optional browser capacity","oss-winnow-economic-stack.outside.proxy":"proxy service","oss-winnow-economic-stack.outside.note":"third-party, drawn outside","oss-winnow-economic-stack.adoption.label":"the narrow adoption path","oss-winnow-economic-stack.adoption.step.binary":"one question in the binary","oss-winnow-economic-stack.adoption.step.service":"shared service","oss-winnow-economic-stack.adoption.step.distributed":"distributed workers","oss-winnow-economic-stack.adoption.note":"One supplier-monitoring question keeps its identity and output contract at every step.","oss-winnow-economic-stack.band.left":"what stays outside stays visible","oss-winnow-economic-stack.band.right":"start with one question","oss-winnow-eng-close-banner.eyebrow":"The whole argument","oss-winnow-eng-close-banner.lead":"Source graphs are replaceable.","oss-winnow-eng-close-banner.accent":"The question contract lasts.","oss-winnow-eng-close-banner.paragraph.one":"Winnow is the explicit runtime around external questions: planning, discovery, typed source kinds, shared rate state, proportional access, bounded crawling, two parser contracts, maintained scrapers, native collectors, typed values, enrichment, evidence, recurrence, authority, errors, surfaces and distributed work.","oss-winnow-eng-close-banner.paragraph.two":"A source can move, change layout, refuse, disappear or be replaced. A later run can return different material because the outside world changed. The method remains inspectable through the source graph and run record. That is the engineering value: enough contract and state to know whether the world changed, the route changed or the run failed.","oss-winnow-eng-close-banner.panel.header":"One run, inspected end to end","oss-winnow-eng-close-banner.panel.tag":"question to result","oss-winnow-eng-close-banner.panel.item.contract":"question and output contract","oss-winnow-eng-close-banner.panel.item.plan":"query plan","oss-winnow-eng-close-banner.panel.item.engines":"engines attempted","oss-winnow-eng-close-banner.panel.item.source":"source selected","oss-winnow-eng-close-banner.panel.item.access":"rate and access state","oss-winnow-eng-close-banner.panel.item.parser":"parser or collector path","oss-winnow-eng-close-banner.panel.item.fields":"typed fields","oss-winnow-eng-close-banner.panel.item.enrichment":"enrichment","oss-winnow-eng-close-banner.panel.item.evidence":"evidence edges","oss-winnow-eng-close-banner.panel.item.authority":"authority decisions","oss-winnow-eng-close-banner.panel.item.errors":"errors","oss-winnow-eng-close-banner.panel.item.output":"output","oss-winnow-eng-close-banner.panel.item.receipt":"run receipt","oss-winnow-eng-close-banner.verdict":"do not test only whether the answer looks right; test whether the question can explain how it ran","oss-winnow-eng-close-banner.footline":"1,325 scrapers, 325 collectors and one explicit runtime boundary","oss-winnow-enrichment-trace.chrome.path":"From source to field","oss-winnow-enrichment-trace.chrome.status":"4 stages, every added field sourced","oss-winnow-enrichment-trace.chrome.meta":"illustrative","oss-winnow-enrichment-trace.notice.title":"Public incident notice","oss-winnow-enrichment-trace.notice.ref":"source text","oss-winnow-enrichment-trace.notice.line.published.pre":"Published","oss-winnow-enrichment-trace.notice.span.date":"12 March 2026","oss-winnow-enrichment-trace.notice.line.issuer.pre":"Issued by","oss-winnow-enrichment-trace.notice.span.organisation":"the city utility","oss-winnow-enrichment-trace.notice.line.event":"A pumping station outage left 14,000 connections without water across the eastern district.","oss-winnow-enrichment-trace.notice.line.location.pre":"Reported at","oss-winnow-enrichment-trace.notice.span.coordinates":"51.55° N, 0.11° W","oss-winnow-enrichment-trace.notice.line.followup":"The City Utility expects service to resume by morning; the regional utility is unaffected.","oss-winnow-enrichment-trace.notice.foot":"three mentions of one operator, one similar name","oss-winnow-enrichment-trace.stage.extract.name":"Extract","oss-winnow-enrichment-trace.stage.extract.field.publishedAt.name":"published_at","oss-winnow-enrichment-trace.stage.extract.field.publishedAt.value":"datetime, 2026-03-12","oss-winnow-enrichment-trace.stage.extract.field.publishedAt.prov":"s1, the publication line","oss-winnow-enrichment-trace.stage.extract.field.organisation.name":"organisation","oss-winnow-enrichment-trace.stage.extract.field.organisation.value":"string, the city utility","oss-winnow-enrichment-trace.stage.extract.field.organisation.prov":"s2, the issuer line","oss-winnow-enrichment-trace.stage.extract.field.affected.name":"affected","oss-winnow-enrichment-trace.stage.extract.field.affected.value":"integer, 14,000 connections","oss-winnow-enrichment-trace.stage.extract.field.affected.prov":"the event sentence","oss-winnow-enrichment-trace.stage.extract.field.source.name":"source","oss-winnow-enrichment-trace.stage.extract.field.source.value":"url, the notice address","oss-winnow-enrichment-trace.stage.extract.field.source.prov":"the notice itself","oss-winnow-enrichment-trace.stage.geo.name":"Geo","oss-winnow-enrichment-trace.stage.geo.field.coordinates.name":"coordinates","oss-winnow-enrichment-trace.stage.geo.field.coordinates.value":"51.55, -0.11","oss-winnow-enrichment-trace.stage.geo.field.coordinates.prov":"s3, the highlighted span","oss-winnow-enrichment-trace.stage.geo.field.notation.name":"notation","oss-winnow-enrichment-trace.stage.geo.field.notation.value":"degrees, cardinal","oss-winnow-enrichment-trace.stage.geo.field.notation.prov":"the shape of s3","oss-winnow-enrichment-trace.stage.geo.note":"The exact source span stays highlighted beside the parsed pair.","oss-winnow-enrichment-trace.stage.classify.name":"Classify","oss-winnow-enrichment-trace.stage.classify.field.category.name":"category","oss-winnow-enrichment-trace.stage.classify.field.category.value":"service disruption, confidence: high","oss-winnow-enrichment-trace.stage.classify.field.category.prov":"the event sentence and published_at","oss-winnow-enrichment-trace.stage.classify.field.alternatives.name":"alternatives","oss-winnow-enrichment-trace.stage.classify.field.alternatives.value":"planned maintenance, weather event","oss-winnow-enrichment-trace.stage.classify.field.alternatives.prov":"kept as candidates, not discarded","oss-winnow-enrichment-trace.stage.classify.note":"Confidence and match state stay attached to the operation.","oss-winnow-enrichment-trace.stage.link.name":"Link","oss-winnow-enrichment-trace.stage.link.field.entity.name":"entity","oss-winnow-enrichment-trace.stage.link.field.entity.value":"one entity from three spelling variants","oss-winnow-enrichment-trace.stage.link.field.entity.prov":"s2 and both later mentions","oss-winnow-enrichment-trace.stage.link.field.outside.name":"outside_cluster","oss-winnow-enrichment-trace.stage.link.field.outside.value":"the regional utility, left outside the cluster","oss-winnow-enrichment-trace.stage.link.field.outside.prov":"a similar name, a distinct organisation","oss-winnow-enrichment-trace.stage.link.note":"Three mentions of the city utility resolve to one entity; the regional utility remains separate.","oss-winnow-enrichment-trace.record.label":"the final record","oss-winnow-enrichment-trace.record.published.name":"published","oss-winnow-enrichment-trace.record.published.chip.date":"date line","oss-winnow-enrichment-trace.record.published.chip.organisation":"organisation","oss-winnow-enrichment-trace.record.published.chip.event":"event description","oss-winnow-enrichment-trace.record.published.chip.location":"location span","oss-winnow-enrichment-trace.record.added.name":"added by Winnow","oss-winnow-enrichment-trace.record.added.chip.typed":"typed fields","oss-winnow-enrichment-trace.record.added.chip.coordinates":"coordinates","oss-winnow-enrichment-trace.record.added.chip.category":"category","oss-winnow-enrichment-trace.record.added.chip.entity":"entity link","oss-winnow-enrichment-trace.record.note":"The record serialises with the distinction intact, so enrichment can be inspected, revised or skipped.","oss-winnow-enrichment-trace.band.text":"enrichment adds structure beside the source, never over it","oss-winnow-enrichment-trace.band.meta":"published stays beside interpreted","oss-winnow-everyday-care.2065f77a20":"Do I need to be good with computers?","oss-winnow-everyday-care.0ca436df0b":"No. You ask for what you want in plain words. There is nothing to install on your part and no settings to fiddle with. The hard work happens out of sight.","oss-winnow-everyday-care.8b9eeada76":"Could it get me into trouble on a website?","oss-winnow-everyday-care.150c29173e":"It is built to be polite. It waits its turn and follows the rules each website sets. Being careful is the way it works by default, not something you have to switch on.","oss-winnow-everyday-care.5fb08abf17":"Where does my information go?","oss-winnow-everyday-care.060aac3af9":"It can run entirely inside Europe, on machines your organisation controls. Your information does not have to cross the ocean to some far-away company.","oss-winnow-everyday-care.39130d36d5":"How do I know what it did?","oss-winnow-everyday-care.8084afa1ab":"It keeps a simple written record of every page it visited and when. If anyone ever asks what happened, the answer is already written down, like a logbook.","oss-winnow-everyday-care.48e6113f8b":"Is it some secret black box?","oss-winnow-everyday-care.5a0ea6ed48":"No. The result keeps notes about its sources and how the information was gathered, so the service can show where it came from.","oss-winnow-everyday-care.d23f90e2f1":"Straight answers","oss-winnow-everyday-care.bee0df1513":"The worries people have, answered plainly.","oss-winnow-everyday-care.e5b888c36d":"Safe to use is the starting point, not an extra you pay for.","oss-winnow-everyday-care.6de81701a2":"Sources stay attached","oss-winnow-everyday-uses.96b99c3519":"The news on a subject","oss-winnow-everyday-uses.382506bf9b":"A short list of recent stories, each with where it came from.","oss-winnow-everyday-uses.6b040189e5":"Find the recent news about the new bus routes in my town.","oss-winnow-everyday-uses.c0a5650aaf":"The price in a few shops","oss-winnow-everyday-uses.cc1170d194":"One tidy row per shop, so you can compare without opening ten tabs.","oss-winnow-everyday-uses.979d0c772a":"Find the price of a particular kettle in a handful of shops.","oss-winnow-everyday-uses.67f31718f8":"An official notice","oss-winnow-everyday-uses.c0b4c5b58a":"The plain facts from the council or government page, pulled out for you.","oss-winnow-everyday-uses.2c1d183e6e":"Find what the council has published about the recycling collection dates.","oss-winnow-everyday-uses.d7c2c57e79":"When something is on","oss-winnow-everyday-uses.ef26c31e76":"The dates and times, lined up neatly like a little diary.","oss-winnow-everyday-uses.3aad331eb7":"Find the opening times for the local library this month.","oss-winnow-everyday-uses.97938fffe2":"An answer to a question","oss-winnow-everyday-uses.ff65dadf26":"The facts that answer it, gathered from a few trusted places at once.","oss-winnow-everyday-uses.8e00ad9369":"Find out which trains run to the city on a Sunday morning.","oss-winnow-everyday-uses.da8ee138c0":"A list you can keep","oss-winnow-everyday-uses.cc2b00e4d7":"A neat list you can save, print, or open in a spreadsheet later.","oss-winnow-everyday-uses.1499c0bc0a":"Make me a list of the gardening clubs within a short drive.","oss-winnow-everyday-uses.1519d0a98b":"Things you can ask for","oss-winnow-everyday-uses.6e891e2b38":"Real little jobs, in plain words.","oss-winnow-everyday-uses.9e50e0bc29":"You do not need special words. You ask the way you would ask a helpful\n            grandchild. Pick one below to see exactly what you might say, and the kind of\n            tidy answer that comes back.","oss-winnow-everyday-uses.d835540537":"What you would say","oss-winnow-everyday-uses.0ada84e2a6":"Anything that lives on web pages, it can go and fetch. You never type a single\n          command, you just say what you want in your own words.","oss-winnow-evidence-state.chrome.path":"A claim with its evidence","oss-winnow-evidence-state.chrome.status":"claim mixed, disagreement on the graph","oss-winnow-evidence-state.chrome.meta":"illustrative","oss-winnow-evidence-state.claim.text":"The supplier stopped manufacturing component X","oss-winnow-evidence-state.claim.state":"mixed","oss-winnow-evidence-state.lane.supports":"supports, 2 sources","oss-winnow-evidence-state.lane.contradicts":"contradicts, 1 source","oss-winnow-evidence-state.node.notice.name":"Official product notice","oss-winnow-evidence-state.node.notice.detail":"lists component X as discontinued","oss-winnow-evidence-state.node.catalogue.name":"Distributor catalogue change","oss-winnow-evidence-state.node.catalogue.detail":"removes component X from the active range","oss-winnow-evidence-state.node.bulletin.name":"Reseller bulletin","oss-winnow-evidence-state.node.bulletin.detail":"repeats the catalogue change, one origin","oss-winnow-evidence-state.node.bulletin.edge":"derived, not independent","oss-winnow-evidence-state.node.page.name":"Supplier product page","oss-winnow-evidence-state.node.page.detail":"still lists component X as available","oss-winnow-evidence-state.node.missing.name":"Open question","oss-winnow-evidence-state.node.missing.detail":"is the listing stale, or is the discontinuation regional?","oss-winnow-evidence-state.time.label":"timing","oss-winnow-evidence-state.time.older":"supplier page, older","oss-winnow-evidence-state.time.newer":"official notice, newer","oss-winnow-evidence-state.time.later":"later","oss-winnow-evidence-state.synthesis.title":"Synthesis","oss-winnow-evidence-state.synthesis.tag":"one operation over the graph","oss-winnow-evidence-state.synthesis.body":"Two independent sources support the discontinuation and one supplier page contradicts it. The bulletin repeats the catalogue, so it adds no new weight. The state stays mixed until the open question is answered.","oss-winnow-evidence-state.synthesis.mention.notice":"official product notice","oss-winnow-evidence-state.synthesis.mention.catalogue":"distributor catalogue change","oss-winnow-evidence-state.synthesis.mention.page":"supplier product page","oss-winnow-evidence-state.synthesis.mention.bulletin":"reseller bulletin","oss-winnow-evidence-state.synthesis.mention.question":"open question","oss-winnow-evidence-state.synthesis.foot":"every claim above links back to its node","oss-winnow-evidence-state.band.text":"a synthesis summarises the graph, it never replaces it","oss-winnow-evidence-state.band.meta":"mixed is a state, not a score","oss-winnow-external-edge.kicker.label":"External source forms","oss-winnow-external-edge.kicker.sub":"different by design","oss-winnow-external-edge.tag":"SOURCE INTELLIGENCE","oss-winnow-external-edge.form.web-page.name":"Web page","oss-winnow-external-edge.form.web-page.example":"supplier notice or product page","oss-winnow-external-edge.form.web-page.difference":"layout and rendering","oss-winnow-external-edge.form.public-api.name":"Public API","oss-winnow-external-edge.form.public-api.example":"official register or open-data endpoint","oss-winnow-external-edge.form.public-api.difference":"schema, pagination and auth","oss-winnow-external-edge.form.feed-stream.name":"Feed or stream","oss-winnow-external-edge.form.feed-stream.example":"news, incidents or live movement","oss-winnow-external-edge.form.feed-stream.difference":"cadence and connection state","oss-winnow-external-edge.form.file-dataset.name":"File or dataset","oss-winnow-external-edge.form.file-dataset.example":"CSV, archive or published research data","oss-winnow-external-edge.form.file-dataset.difference":"version and batch lifecycle","oss-winnow-external-edge.form.search.name":"Search","oss-winnow-external-edge.form.search.example":"discovery across unknown locations","oss-winnow-external-edge.form.search.difference":"candidate sources, not final evidence","oss-winnow-external-edge.footline.left":"external information is heterogeneous","oss-winnow-external-edge.footline.right":"the question should not be","oss-winnow-guardrails.verdictAllowed":"allowed","oss-winnow-guardrails.verdictSalted":"salted","oss-winnow-guardrails.verdictLogged":"logged","oss-winnow-guardrails.83fdc54e30":"Rate limiter","oss-winnow-guardrails.cdb9a81af0":"within policy","oss-winnow-guardrails.3e64bf32b1":"Per domain token bucket, matched to the source documented policy. Not configurable per scraper, because getting it wrong means a ban.","oss-winnow-guardrails.07df02387c":"Deny by default. If the domain robots.txt is not fetched and cached, winnow refuses to crawl it.","oss-winnow-guardrails.51e68ccddf":"SSRF policy","oss-winnow-guardrails.976b39649d":"public host","oss-winnow-guardrails.87f10c4551":"Private IP ranges (10.x, 172.16 to 31.x, 192.168.x, 127.x, ::1) are blocked in every URL input.","oss-winnow-guardrails.53e8bfe881":"Pseudonymise","oss-winnow-guardrails.b995dfdd57":"GDPR pseudonymization is built in: salted SHA-256 hashing of PII fields.","oss-winnow-guardrails.5bcda19fca":"Audit record","oss-winnow-guardrails.2323d007d4":"Source, URL, timestamp, status, and content hash recorded per request. Exportable to a SIEM.","oss-winnow-guardrails.56dd357b66":"Robots handling and SSRF protection are built in; safe operation does not depend on an override.","oss-winnow-guardrails.4ca96c04d3":"The request trace records which controls ran and what each one decided.","oss-winnow-guardrails.6fc68a0565":"Lawful basis for each source is the operator decision.","oss-winnow-guardrails.5bba453340":"Retention and data minimisation policy is the operator decision.","oss-winnow-guardrails.f72e9b7b2f":"5 gates, default on","oss-winnow-guardrails.99f0a9fb97":"before any byte leaves","oss-winnow-guardrails.33ca41483b":"GET https://example.com/article","oss-winnow-guardrails.9027d8e924":"typed record, content addressed","oss-winnow-guardrails.c3031c857f":"Winnow handles","oss-winnow-guardrails.15c27f52bf":"Operator decides","oss-winnow-guardrails.dcc9e74555":"Honest by construction. A library cannot claim GDPR certification on your behalf.","oss-winnow-guardrails.7ab98f1b15":"compliance by default","oss-winnow-hero-glyph.dee9dde24b":"[INFO] Discovery: 28 engines queried in parallel","oss-winnow-hero-glyph.f48ae2c325":"[INFO] Global rate limit: 1 req/s, robots.txt deny-default","oss-winnow-hero-glyph.cb6431b358":"[INFO] Scraping 12 result URLs for full content...","oss-winnow-hero-glyph.0da7873d32":"[1/12] Scraping eur-lex.europa.eu/eli/dir/2023/1791...","oss-winnow-hero-glyph.3ea8e130ab":"\"Directive (EU) 2023/1791\"","oss-winnow-hero-glyph.5c9cb498f5":"Government","oss-winnow-hero-glyph.d2d0663714":"Science","oss-winnow-hero-glyph.34c808d0a6":"News","oss-winnow-hero-glyph.d85fc8a070":"Collectors","oss-winnow-hero-glyph.6041ae54b3":"Winnow [","oss-winnow-hero-glyph.3208a0ad5e":"40 MB rust binary →","oss-winnow-hero-glyph.439f048194":"Rate-limited","oss-winnow-hero-glyph.16813b9665":"questions that run","oss-winnow-hero-glyph.3eecc27e63":"stdout → jsonl → record 1 of 12","oss-winnow-hero-glyph.fab7810c4f":"12 records written to stdout, audit log appended","oss-winnow-hero-glyph.f067134e30":"Built-in sources","oss-winnow-hero-glyph.3042fd52aa":"1,325 scrapers, 28 engines","oss-winnow-hero-glyph.6677bdd8d5":"Output formats","oss-winnow-hero-glyph.fb8facf93f":"pipe to stdout","oss-winnow-hero-glyph.225d0ca980":"winnow search","oss-winnow-hero-glyph.0ef8c6b19c":"exit 0","oss-winnow-hero-glyph.2f3587be2d":"robots ok, 0 blocked","oss-winnow-hero-glyph.d8087f5070":"12 records","oss-winnow-hero-glyph.587e9f99fe":"847 ms","oss-winnow-hidden-research-work.kicker.label":"One answer","oss-winnow-hidden-research-work.kicker.sub":"the work hidden behind it","oss-winnow-hidden-research-work.tag":"OPERATIONS","oss-winnow-hidden-research-work.ghost.label":"disappears","oss-winnow-hidden-research-work.activity.find-sources.name":"Find sources","oss-winnow-hidden-research-work.activity.find-sources.lives-in":"browser tabs and bookmarks","oss-winnow-hidden-research-work.activity.find-sources.disappears":"why those sources were chosen","oss-winnow-hidden-research-work.activity.extract-facts.name":"Extract facts","oss-winnow-hidden-research-work.activity.extract-facts.lives-in":"notes and copy-paste","oss-winnow-hidden-research-work.activity.extract-facts.disappears":"field and source structure","oss-winnow-hidden-research-work.activity.compare.name":"Compare","oss-winnow-hidden-research-work.activity.compare.lives-in":"spreadsheet formulas","oss-winnow-hidden-research-work.activity.compare.disappears":"support and contradiction state","oss-winnow-hidden-research-work.activity.refresh.name":"Refresh","oss-winnow-hidden-research-work.activity.refresh.lives-in":"someone's calendar","oss-winnow-hidden-research-work.activity.refresh.disappears":"a repeatable method","oss-winnow-hidden-research-work.footline.left":"the answer survives","oss-winnow-hidden-research-work.footline.right":"the route usually does not","oss-winnow-invisible-engine.app.label":"the application screen","oss-winnow-invisible-engine.app.question":"When is the records office open?","oss-winnow-invisible-engine.app.result.1.text":"weekdays, 9 to 5","oss-winnow-invisible-engine.app.result.1.source":"townhall.example","oss-winnow-invisible-engine.app.result.2.text":"first Saturday of the month, 10 to 1","oss-winnow-invisible-engine.app.result.2.source":"townhall.example","oss-winnow-invisible-engine.app.result.3.text":"closed on public holidays","oss-winnow-invisible-engine.app.result.3.source":"gazette.example","oss-winnow-invisible-engine.app.result.4.text":"summer hours posted each June","oss-winnow-invisible-engine.app.result.4.source":"parish.example","oss-winnow-invisible-engine.app.unresolved":"one time still being checked","oss-winnow-invisible-engine.band.left":"the product stays simple, the work stays visible","oss-winnow-invisible-engine.band.right":"every stage inspectable","oss-winnow-invisible-engine.chrome.meta":"deployment view, illustrative","oss-winnow-invisible-engine.chrome.path":"What runs underneath","oss-winnow-invisible-engine.chrome.status":"engine underneath, product on top","oss-winnow-invisible-engine.engine.browser.name":"browser","oss-winnow-invisible-engine.engine.browser.note":"not needed for these sources","oss-winnow-invisible-engine.engine.label":"Winnow, working underneath","oss-winnow-invisible-engine.engine.stage.1":"search candidate","oss-winnow-invisible-engine.engine.stage.2":"register scraper","oss-winnow-invisible-engine.engine.stage.3":"disruption feed","oss-winnow-invisible-engine.engine.stage.4":"typed records","oss-winnow-invisible-engine.engine.stage.5":"run receipt","oss-winnow-invisible-engine.op.chip.1":"open-source code, Apache-2.0","oss-winnow-invisible-engine.op.chip.2":"local binary","oss-winnow-invisible-engine.op.chip.3":"output file","oss-winnow-invisible-engine.op.label":"operator-controlled infrastructure","oss-winnow-invisible-engine.op.question":"When is the records office open?","oss-winnow-invisible-engine.op.same":"the same question","oss-winnow-lifecycle-lattice.chrome.path":"Sources on one rail","oss-winnow-lifecycle-lattice.chrome.status":"seven lifecycles align on one rail","oss-winnow-lifecycle-lattice.chrome.meta":"shared metadata rail","oss-winnow-lifecycle-lattice.col.api.name":"API collector","oss-winnow-lifecycle-lattice.col.api.step.paginate":"paginate","oss-winnow-lifecycle-lattice.col.api.step.token":"refresh token","oss-winnow-lifecycle-lattice.col.api.envelope":"records","oss-winnow-lifecycle-lattice.col.rss.name":"RSS source","oss-winnow-lifecycle-lattice.col.rss.step.poll":"poll","oss-winnow-lifecycle-lattice.col.rss.step.entries":"remember entry IDs","oss-winnow-lifecycle-lattice.col.rss.envelope":"feed entries","oss-winnow-lifecycle-lattice.col.socket.name":"WebSocket source","oss-winnow-lifecycle-lattice.col.socket.step.hold":"hold connection","oss-winnow-lifecycle-lattice.col.socket.step.reconnect":"reconnect","oss-winnow-lifecycle-lattice.col.socket.step.resume":"resume","oss-winnow-lifecycle-lattice.col.socket.envelope":"messages","oss-winnow-lifecycle-lattice.col.scraper.name":"Scraper","oss-winnow-lifecycle-lattice.col.scraper.step.fetch":"fetch one page","oss-winnow-lifecycle-lattice.col.scraper.step.fields":"emit named fields","oss-winnow-lifecycle-lattice.col.scraper.envelope":"typed fields","oss-winnow-lifecycle-lattice.col.crawler.name":"Crawler","oss-winnow-lifecycle-lattice.col.crawler.step.frontier":"expand bounded frontier","oss-winnow-lifecycle-lattice.col.crawler.envelope":"pages and crawl state","oss-winnow-lifecycle-lattice.col.file.name":"File reader","oss-winnow-lifecycle-lattice.col.file.step.open":"open","oss-winnow-lifecycle-lattice.col.file.step.validate":"validate","oss-winnow-lifecycle-lattice.col.file.step.iterate":"iterate archive","oss-winnow-lifecycle-lattice.col.file.envelope":"rows and objects","oss-winnow-lifecycle-lattice.col.search.name":"Search engine","oss-winnow-lifecycle-lattice.col.search.step.query":"query","oss-winnow-lifecycle-lattice.col.search.step.rank":"rank","oss-winnow-lifecycle-lattice.col.search.step.cache":"cache","oss-winnow-lifecycle-lattice.col.search.envelope":"candidate URLs","oss-winnow-lifecycle-lattice.rail.title":"shared metadata rail","oss-winnow-lifecycle-lattice.rail.field.id":"source ID","oss-winnow-lifecycle-lattice.rail.field.category":"category","oss-winnow-lifecycle-lattice.rail.field.uri":"URI","oss-winnow-lifecycle-lattice.rail.field.observed":"observation time","oss-winnow-lifecycle-lattice.rail.field.run":"run ID","oss-winnow-lifecycle-lattice.fallback.title":"Generic fallback page","oss-winnow-lifecycle-lattice.fallback.marker":"generic","oss-winnow-lifecycle-lattice.fallback.yield.title":"title","oss-winnow-lifecycle-lattice.fallback.yield.metadata":"metadata","oss-winnow-lifecycle-lattice.fallback.yield.hints":"structured hints","oss-winnow-lifecycle-lattice.fallback.yield.links":"links","oss-winnow-lifecycle-lattice.fallback.yield.text":"text","oss-winnow-lifecycle-lattice.fallback.note":"no maintained site schema","oss-winnow-lifecycle-lattice.band.left":"each source keeps its own lifecycle","oss-winnow-lifecycle-lattice.band.right":"one shared metadata rail","oss-winnow-manual-ledger.kicker.label":"The recurring research ledger","oss-winnow-manual-ledger.kicker.sub":"what resets every time","oss-winnow-manual-ledger.tag":"COST","oss-winnow-manual-ledger.task.source-discovery.name":"Source discovery","oss-winnow-manual-ledger.task.source-discovery.class":"mostly mechanical","oss-winnow-manual-ledger.task.source-discovery.posture":"planned and repeatable","oss-winnow-manual-ledger.task.field-extraction.name":"Field extraction","oss-winnow-manual-ledger.task.field-extraction.class":"mechanical","oss-winnow-manual-ledger.task.field-extraction.posture":"typed scrapers and collectors","oss-winnow-manual-ledger.task.entity-date-cleaning.name":"Entity and date cleaning","oss-winnow-manual-ledger.task.entity-date-cleaning.class":"mostly mechanical","oss-winnow-manual-ledger.task.entity-date-cleaning.posture":"normalisation and linking","oss-winnow-manual-ledger.task.contradiction-review.name":"Contradiction review","oss-winnow-manual-ledger.task.contradiction-review.class":"judgement","oss-winnow-manual-ledger.task.contradiction-review.posture":"kept visible for a person","oss-winnow-manual-ledger.task.final-decision.name":"Final decision","oss-winnow-manual-ledger.task.final-decision.class":"judgement","oss-winnow-manual-ledger.task.final-decision.posture":"remains with the organisation","oss-winnow-manual-ledger.footline.left":"automate the repetition","oss-winnow-manual-ledger.footline.right":"surface the decision","oss-winnow-manual-loop.chrome.path":"The question remembers","oss-winnow-manual-loop.chrome.status":"state retained between runs","oss-winnow-manual-loop.chrome.meta":"illustrative","oss-winnow-manual-loop.manual.head":"the manual loop","oss-winnow-manual-loop.manual.step.search":"search","oss-winnow-manual-loop.manual.step.open":"open","oss-winnow-manual-loop.manual.step.copy":"copy","oss-winnow-manual-loop.manual.step.clean":"clean","oss-winnow-manual-loop.manual.step.compare":"compare","oss-winnow-manual-loop.manual.step.cite":"cite","oss-winnow-manual-loop.manual.sent":"report sent","oss-winnow-manual-loop.manual.reset":"resets after delivery","oss-winnow-manual-loop.winnow.head":"the Winnow path","oss-winnow-manual-loop.winnow.retained.head":"retained between runs","oss-winnow-manual-loop.winnow.retained.question":"the question","oss-winnow-manual-loop.winnow.retained.source-graph":"the source graph","oss-winnow-manual-loop.winnow.retained.previous-result":"previous result state","oss-winnow-manual-loop.winnow.run-one":"run one","oss-winnow-manual-loop.winnow.run-one-note":"builds the state","oss-winnow-manual-loop.winnow.run-two":"run two","oss-winnow-manual-loop.winnow.run-two-note":"begins at source refresh","oss-winnow-manual-loop.winnow.gate":"contradiction review","oss-winnow-manual-loop.winnow.gate-tag":"human","oss-winnow-manual-loop.winnow.output":"change set","oss-winnow-manual-loop.winnow.output-note":"to the review queue","oss-winnow-manual-loop.band.left":"the loop stops resetting","oss-winnow-manual-loop.band.right":"judgement stays with people","oss-winnow-manual-steps.kicker.label":"What search leaves","oss-winnow-manual-steps.kicker.sub":"the work after the result page","oss-winnow-manual-steps.kicker.tag":"Plain","oss-winnow-manual-steps.steps.01":"open the promising pages","oss-winnow-manual-steps.steps.02":"find the useful line in each one","oss-winnow-manual-steps.steps.03":"copy names, dates and numbers","oss-winnow-manual-steps.steps.04":"work out which source is newer or different","oss-winnow-manual-steps.steps.05":"repeat it when anything changes","oss-winnow-manual-steps.foot.left":"search finds possible doors","oss-winnow-manual-steps.foot.right":"Winnow can carry the question through them","oss-winnow-operational-record.kicker.label":"One collected item","oss-winnow-operational-record.kicker.sub":"usable by people and systems","oss-winnow-operational-record.tag":"HANDOFF","oss-winnow-operational-record.field.supplier.name":"supplier","oss-winnow-operational-record.field.supplier.value":"legal entity ID and name","oss-winnow-operational-record.field.supplier.context":"register and observation time","oss-winnow-operational-record.field.change.name":"change","oss-winnow-operational-record.field.change.value":"new filing or event type","oss-winnow-operational-record.field.change.context":"source field and parser","oss-winnow-operational-record.field.effective-at.name":"effective_at","oss-winnow-operational-record.field.effective-at.value":"typed datetime","oss-winnow-operational-record.field.effective-at.context":"source timezone","oss-winnow-operational-record.field.support-state.name":"support_state","oss-winnow-operational-record.field.support-state.value":"supported, mixed or unresolved","oss-winnow-operational-record.field.support-state.context":"source relationships","oss-winnow-operational-record.foot.left":"typed and usable","oss-winnow-operational-record.foot.right":"attached to its source","oss-winnow-ownership.cbd17d59ba":"Route recorded","oss-winnow-ownership.82b21b2328":"The same collection route can run on your servers, in a European region, or fully isolated.","oss-winnow-ownership.5adba0fda5":"Choose the deployment boundary","oss-winnow-ownership.b8b828011f":"With Winnow","oss-winnow-ownership.93deb7fba6":"Separate collection paths","oss-winnow-ownership.fc2024103b":"Five source paths become one governed run.","oss-winnow-ownership.072f3a916c":"Collection route","oss-winnow-ownership.5e55977451":"Run with no outside connection for sensitive collection work.","oss-winnow-ownership.28fdd72ec1":"Fully isolated","oss-winnow-ownership.bed45372ae":"Run in a European region while keeping the route and data in scope.","oss-winnow-ownership.1ddf3d4832":"European region","oss-winnow-ownership.74145e5066":"Run behind your firewall beside the systems that consume the results.","oss-winnow-ownership.1f200f6013":"Your servers","oss-winnow-ownership.b7929c72f9":"The route and collected data stay inside the boundary you choose","oss-winnow-ownership.869e13ba16":"Each source path develops its own storage and transfer behaviour","oss-winnow-ownership.a4b2edef2b":"Data boundary","oss-winnow-ownership.9995b461d6":"One shared policy for source rules, rate limits, and unsafe addresses","oss-winnow-ownership.0126fa56ee":"Each script remembers safety differently","oss-winnow-ownership.3d178f525a":"Guardrails","oss-winnow-ownership.d1f397718f":"One recorded run with typed outputs","oss-winnow-ownership.94abe6bc02":"Different output shapes and partial logs","oss-winnow-ownership.43f158a914":"Output","oss-winnow-ownership.3ac5371683":"One route carries discovery, fetching, parsing, and output","oss-winnow-ownership.a0e1173621":"Different scripts and services coordinate by convention","oss-winnow-ownership.69757af4c7":"Coordination","oss-winnow-ownership.049203dd68":"One run definition with explicit inputs and stages","oss-winnow-ownership.12870991a1":"Separate scripts for search, browsing, APIs, feeds, and files","oss-winnow-ownership.42feee4501":"Route shape","oss-winnow-ownership.31e9cf45e0":"Before and after","oss-winnow-ownership.634ea66e79":"From fragmented collectors to one recorded route.","oss-winnow-ownership.49d2edda3e":"The same question, one governed run.","oss-winnow-parser-profiles.console.title":"Parser profiles","oss-winnow-parser-profiles.console.subtitle":"Three profiles retain different structures for the same source.","oss-winnow-parser-profiles.kicker.label":"Two profiles","oss-winnow-parser-profiles.kicker.sub":"different costs, same source identity","oss-winnow-parser-profiles.tag":"PARSER","oss-winnow-parser-profiles.profile.dom.name":"Full DOM","oss-winnow-parser-profiles.profile.dom.suited":"repeated selectors and structural navigation","oss-winnow-parser-profiles.profile.dom.retained":"arena tree and indices","oss-winnow-parser-profiles.profile.dom.memory":"grows with the document","oss-winnow-parser-profiles.profile.stream.name":"Streaming","oss-winnow-parser-profiles.profile.stream.suited":"large or forward-only documents","oss-winnow-parser-profiles.profile.stream.retained":"handler state and bounded buffer","oss-winnow-parser-profiles.profile.stream.memory":"fixed working set","oss-winnow-parser-profiles.profile.generic.name":"Generic metadata","oss-winnow-parser-profiles.profile.generic.suited":"unknown pages requiring a fallback","oss-winnow-parser-profiles.profile.generic.retained":"metadata, structured hints, links and text","oss-winnow-parser-profiles.profile.generic.memory":"broad and shallow","oss-winnow-parser-profiles.foot.left":"choose by workload","oss-winnow-parser-profiles.foot.right":"record which path ran","oss-winnow-pipeline.12a0c370ad":"SSRF, private ranges blocked","oss-winnow-pipeline.e6fe7d6ea5":"robots.txt, deny by default","oss-winnow-pipeline.89e18b3772":"per domain rate limiter","oss-winnow-pipeline.9e198d4694":"Every HTTP request passes through","oss-winnow-pipeline.c846023e98":"STAGE","oss-winnow-pipeline.71c96aaca2":"query to records","oss-winnow-pipeline.cb737e6dde":"pipeline resolved","oss-winnow-pipeline.b4a29e54b1":"winnow scrape https://...","oss-winnow-pipeline.6c587ed4f5":"json and jsonl","oss-winnow-pipeline.d6df67ed2f":"5 formats","oss-winnow-pipeline.9f49fc38d0":"One of five typed formats, ready for a pipe, file, stream, or the next service.","oss-winnow-pipeline.4bed336194":"Output","oss-winnow-pipeline.9731f06c9e":"Unknown URLs fall back to a generic Open Graph and Schema.org extractor.","oss-winnow-pipeline.26c992ac04":"Output is title, author, date, price, typed, never raw markup.","oss-winnow-pipeline.aeb206c48b":"1,325 site scrapers, each one a typed Rust struct.","oss-winnow-pipeline.d42cac0b8d":"1,325 scrapers","oss-winnow-pipeline.cc34c76d3c":"CSS selectors extract typed fields, not a blob of HTML.","oss-winnow-pipeline.b7e45a36ff":"Parse","oss-winnow-pipeline.b30db25441":"3. Stealth browser only when a site actively blocks. Sub second otherwise.","oss-winnow-pipeline.68799190d2":"2. Stealth HTTP with JA3 and JA4 TLS fingerprinting.","oss-winnow-pipeline.7b1844f878":"1. Plain HTTP with realistic headers. The fast default.","oss-winnow-pipeline.455de6e218":"3 strategies","oss-winnow-pipeline.5ae343f989":"Three escalating strategies. Most pages never need a browser.","oss-winnow-pipeline.d48aafe689":"Fetch","oss-winnow-pipeline.6da72a7755":"Each engine has its own rate limiter, matched to its policy.","oss-winnow-pipeline.3213b1c7f7":"SERP processor deduplicates by URL and blends rankings.","oss-winnow-pipeline.fa360c72f0":"28 search engine integrations queried concurrently.","oss-winnow-pipeline.065cacb299":"28 engines","oss-winnow-pipeline.0b9e097c3d":"Optional. Query the open web in parallel, merge and rank the results.","oss-winnow-pipeline.3b3290c7fa":"Discovery","oss-winnow-plain-answer.bb5a84be29":"You never have to write a line of anything. You ask in plain words, and the answer comes\n          back in plain words.","oss-winnow-plain-answer.d96cb10995":"A tidy list, ready to read.","oss-winnow-plain-answer.29cc70a6ac":"You receive","oss-winnow-plain-answer.c459101a2e":"Reads the pages, politely, for you.","oss-winnow-plain-answer.8470202743":"It goes out","oss-winnow-plain-answer.dc2ad784b7":"Tell it what you want to find.","oss-winnow-plain-answer.7ed149da71":"You ask","oss-winnow-plain-answer.0ec71cac14":"You say what you are looking for. Winnow reads across the web, gathers the useful parts with their sources, and brings them back in a clear list. One assistant does the repetitive work, so you do not have to visit a hundred pages by hand.","oss-winnow-plain-answer.a9d8f18a86":"Winnow is the open engine that lets a product ask the outside world, bring back the useful parts with sources attached, and ask again later.","oss-winnow-plain-answer.704869f20f":"In plain words","oss-winnow-plain-answer.ea460e6d7d":"Instead of a messy pile of web pages, you get a neat list you can open in a spreadsheet, like a shopping receipt with one line per item. No tangle to sort out yourself.","oss-winnow-plain-answer.7f3954e642":"It hands back a tidy box","oss-winnow-plain-answer.d9a8aeac83":"Ask on Monday and again on Friday to see what changed. Each run keeps the route and sources behind the result, so you can compare the two instead of guessing.","oss-winnow-plain-answer.d04f086c27":"Ask again, see what changed","oss-winnow-plain-answer.572ed4f197":"Winnow follows configured rate limits and robots rules before it visits a page. Those safeguards are part of the run rather than something you have to remember each time.","oss-winnow-plain-answer.4100f149b9":"It follows site rules","oss-winnow-plain-answer.15937ba1ca":"The web is full of noise. Winnow reads many pages and brings back the useful parts you asked for, with their sources attached. It keeps what matters and leaves the clutter behind.","oss-winnow-plain-answer.dfcc425af4":"It keeps the useful parts","oss-winnow-plain-answer.708f16fd2b":"You ask once, in plain words","oss-winnow-plain-answer.2c29a4a179":"One assistant visits the many pages","oss-winnow-plain-answer.6cf74799fb":"A tidy answer comes back","oss-winnow-plain-answer.fec60ad88b":"You never open a hundred pages yourself. One polite assistant does the visiting and brings back only what matters.","oss-winnow-plain-answer.dd57cae109":"the many pages","oss-winnow-plain-question.kicker.label":"One question","oss-winnow-plain-question.kicker.sub":"what the product remembers","oss-winnow-plain-question.kicker.tag":"Plain","oss-winnow-plain-question.rows.what.name":"What","oss-winnow-plain-question.rows.what.detail":"the thing you are trying to find or compare","oss-winnow-plain-question.rows.where.name":"Where","oss-winnow-plain-question.rows.where.detail":"the kinds of public source worth checking","oss-winnow-plain-question.rows.back.name":"What comes back","oss-winnow-plain-question.rows.back.detail":"a list, comparison, change or clear answer","oss-winnow-plain-question.rows.again.name":"When again","oss-winnow-plain-question.rows.again.detail":"once, later, or whenever it needs to stay current","oss-winnow-plain-question.foot.left":"the question stays","oss-winnow-plain-question.foot.right":"the outside world may change","oss-winnow-question-asset-timeline.chrome.path":"A question becomes an asset","oss-winnow-question-asset-timeline.chrome.status":"objective unchanged for two years","oss-winnow-question-asset-timeline.chrome.meta":"illustrative","oss-winnow-question-asset-timeline.question.label":"the question","oss-winnow-question-asset-timeline.question.title":"Regulatory obligation monitoring","oss-winnow-question-asset-timeline.question.note":"same objective, output contract and cadence throughout","oss-winnow-question-asset-timeline.axis.span":"two years","oss-winnow-question-asset-timeline.period.p1.label":"period one","oss-winnow-question-asset-timeline.period.p2.label":"period two","oss-winnow-question-asset-timeline.period.p3.label":"period three","oss-winnow-question-asset-timeline.change.p2":"the ministry published an API; the page scraper became a collector","oss-winnow-question-asset-timeline.change.p3":"the newsletter ended; the gap stayed visible until approval","oss-winnow-question-asset-timeline.source.ministry-page.name":"ministry page","oss-winnow-question-asset-timeline.source.ministry-page.kind":"site scraper","oss-winnow-question-asset-timeline.source.legal-search.name":"legal search engine","oss-winnow-question-asset-timeline.source.legal-search.kind":"search","oss-winnow-question-asset-timeline.source.newsletter.name":"specialist newsletter","oss-winnow-question-asset-timeline.source.newsletter.kind":"feed","oss-winnow-question-asset-timeline.source.ministry-api.name":"ministry API","oss-winnow-question-asset-timeline.source.ministry-api.kind":"native collector","oss-winnow-question-asset-timeline.source.newsletter-ended.name":"newsletter ended","oss-winnow-question-asset-timeline.source.newsletter-ended.kind":"gap held","oss-winnow-question-asset-timeline.source.replacement.name":"approved replacement","oss-winnow-question-asset-timeline.source.replacement.kind":"new source","oss-winnow-question-asset-timeline.contract.label":"the output contract does not move","oss-winnow-question-asset-timeline.contract.field.obligation":"obligation","oss-winnow-question-asset-timeline.contract.field.jurisdiction":"jurisdiction","oss-winnow-question-asset-timeline.contract.field.effective-date":"effective date","oss-winnow-question-asset-timeline.contract.field.affected-area":"affected area","oss-winnow-question-asset-timeline.contract.field.source":"source","oss-winnow-question-asset-timeline.receipt.head":"source-path record","oss-winnow-question-asset-timeline.receipt.r1":"period two: page scraper replaced by a native collector when the ministry published an API","oss-winnow-question-asset-timeline.receipt.r2":"period three: newsletter source ended; the gap stayed visible until a replacement was approved","oss-winnow-question-asset-timeline.band.left":"maintenance under the question","oss-winnow-question-asset-timeline.band.right":"not a new project","oss-winnow-question-contract.kicker.label":"The contract","oss-winnow-question-contract.kicker.sub":"what remains stable","oss-winnow-question-contract.tag":"ROOT","oss-winnow-question-contract.row.objective.name":"Objective","oss-winnow-question-contract.row.objective.body":"What must be found, compared, collected or kept current.","oss-winnow-question-contract.row.sources.name":"Sources","oss-winnow-question-contract.row.sources.body":"Which source families are acceptable and which are excluded.","oss-winnow-question-contract.row.output.name":"Output","oss-winnow-question-contract.row.output.body":"The fields, records, evidence state or change set expected back.","oss-winnow-question-contract.row.cadence.name":"Cadence and authority","oss-winnow-question-contract.row.cadence.body":"Once, scheduled, incremental or streaming, under declared boundaries.","oss-winnow-question-contract.foot.left":"the contract stays","oss-winnow-question-contract.foot.right":"the graph may change","oss-winnow-question-graph.chrome.path":"One question, changing sources","oss-winnow-question-graph.chrome.meta":"one question, three runs","oss-winnow-question-graph.status.one":"graph revision one, contract unchanged","oss-winnow-question-graph.status.two":"graph revision two, contract unchanged","oss-winnow-question-graph.status.three":"graph revision three, contract unchanged","oss-winnow-question-graph.tabs.label":"Run states","oss-winnow-question-graph.tab.one.label":"Run one","oss-winnow-question-graph.tab.one.note":"registers, legal search, two news scrapers","oss-winnow-question-graph.tab.two.label":"Run two","oss-winnow-question-graph.tab.two.note":"a moved endpoint is replaced","oss-winnow-question-graph.tab.three.label":"Run three","oss-winnow-question-graph.tab.three.note":"a feed joins, a scraper leaves","oss-winnow-question-graph.question.kicker":"question contract","oss-winnow-question-graph.question.text":"Which suppliers published a material risk change this week?","oss-winnow-question-graph.question.fixed":"the same card in every run","oss-winnow-question-graph.kind.search":"search engine","oss-winnow-question-graph.kind.scraper":"scraper","oss-winnow-question-graph.kind.collector":"collector","oss-winnow-question-graph.kind.feed":"feed","oss-winnow-question-graph.kind.processor":"processor","oss-winnow-question-graph.edge.discovery":"discovery","oss-winnow-question-graph.edge.direct":"direct target","oss-winnow-question-graph.edge.fallback":"fallback","oss-winnow-question-graph.edge.corroboration":"corroboration","oss-winnow-question-graph.node.registers":"Company registers","oss-winnow-question-graph.node.legal":"Legal search engine","oss-winnow-question-graph.node.newsA":"News scraper A","oss-winnow-question-graph.node.newsB":"News scraper B","oss-winnow-question-graph.node.registerApi":"Register API collector","oss-winnow-question-graph.node.sanctions":"Sanctions feed","oss-winnow-question-graph.node.assembly":"Result assembly","oss-winnow-question-graph.node.new":"new in this revision","oss-winnow-question-graph.node.moved":"endpoint moved","oss-winnow-question-graph.node.disabled":"disabled after repeated failures","oss-winnow-question-graph.results.suffix":"results","oss-winnow-question-graph.output.title":"one output shape","oss-winnow-question-graph.output.supplier":"supplier","oss-winnow-question-graph.output.changeType":"change type","oss-winnow-question-graph.output.date":"date","oss-winnow-question-graph.output.source":"source","oss-winnow-question-graph.output.supportState":"support state","oss-winnow-question-graph.output.unresolved":"unresolved items","oss-winnow-question-graph.readout.one":"Company registers, a legal search engine and two news scrapers answer the question. Each graph node keeps its own type, and the question card carries the same output contract it always carries.","oss-winnow-question-graph.readout.two":"One register endpoint has moved, so a native API collector takes its place on the fallback edge. The question card does not move, and the six expected fields stay exactly as declared.","oss-winnow-question-graph.readout.three":"A new sanctions feed joins as a corroborating source while one news scraper is disabled after repeated failures. The graph changes again; the result still returns to the same output shape.","oss-winnow-question-graph.band.left":"the question stays fixed","oss-winnow-question-graph.band.right":"everything beneath it changes","oss-winnow-question-in-browser-history.chrome.path":"The question that returns","oss-winnow-question-in-browser-history.chrome.status":"question owned from quarter four","oss-winnow-question-in-browser-history.chrome.meta":"illustrative","oss-winnow-question-in-browser-history.quarter.q1.label":"Quarter one","oss-winnow-question-in-browser-history.quarter.q2.label":"Quarter two","oss-winnow-question-in-browser-history.quarter.q3.label":"Quarter three","oss-winnow-question-in-browser-history.quarter.q4.label":"Quarter four","oss-winnow-question-in-browser-history.step.tabs":"same tabs","oss-winnow-question-in-browser-history.step.fields":"same registry fields","oss-winnow-question-in-browser-history.step.sanctions":"same sanctions checks","oss-winnow-question-in-browser-history.step.sheet":"spreadsheet rebuilt","oss-winnow-question-in-browser-history.quarter.q1.report":"report PDF, quarter one","oss-winnow-question-in-browser-history.quarter.q2.report":"report PDF, quarter two","oss-winnow-question-in-browser-history.quarter.q3.report":"report PDF, quarter three","oss-winnow-question-in-browser-history.question.title":"Quarterly supplier review","oss-winnow-question-in-browser-history.question.field.objective.name":"Objective","oss-winnow-question-in-browser-history.question.field.objective.value":"material supplier changes","oss-winnow-question-in-browser-history.question.field.sources.name":"Accepted sources","oss-winnow-question-in-browser-history.question.field.sources.value":"register, sanctions, news","oss-winnow-question-in-browser-history.question.field.output.name":"Output fields","oss-winnow-question-in-browser-history.question.field.output.value":"change, date, source, state","oss-winnow-question-in-browser-history.question.field.cadence.name":"Cadence","oss-winnow-question-in-browser-history.question.field.cadence.value":"quarterly, state retained","oss-winnow-question-in-browser-history.quarter.q4.change-set":"change set returned","oss-winnow-question-in-browser-history.time.caption":"human work behind each answer","oss-winnow-question-in-browser-history.time.resets":"resets to zero","oss-winnow-question-in-browser-history.time.carries":"carries forward","oss-winnow-question-in-browser-history.band.left":"the answer was delivered every quarter","oss-winnow-question-in-browser-history.band.right":"now the method stays","oss-winnow-question-timeline.chrome.path":"One question over time","oss-winnow-question-timeline.chrome.status":"three runs, one question","oss-winnow-question-timeline.chrome.meta":"illustrative","oss-winnow-question-timeline.question.label":"the question, fixed","oss-winnow-question-timeline.question.text":"Which products moved in price?","oss-winnow-question-timeline.question.field.product":"product","oss-winnow-question-timeline.question.field.price":"price","oss-winnow-question-timeline.question.field.observed":"observed","oss-winnow-question-timeline.question.field.source":"source","oss-winnow-question-timeline.question.field.state":"state","oss-winnow-question-timeline.week.one.chip":"week one","oss-winnow-question-timeline.week.one.title":"baseline","oss-winnow-question-timeline.week.one.change.pages":"retailer pages read","oss-winnow-question-timeline.week.one.change.feeds":"structured feeds read","oss-winnow-question-timeline.week.one.change.baseline":"baseline prices recorded","oss-winnow-question-timeline.week.one.source":"source graph established","oss-winnow-question-timeline.week.two.chip":"week two","oss-winnow-question-timeline.week.two.title":"changes","oss-winnow-question-timeline.week.two.change.added":"2 products added","oss-winnow-question-timeline.week.two.change.prices":"3 prices changed","oss-winnow-question-timeline.week.two.source":"one source unavailable after access failure","oss-winnow-question-timeline.week.three.chip":"week three","oss-winnow-question-timeline.week.three.title":"repair and contradiction","oss-winnow-question-timeline.week.three.change.resolved":"1 missing price resolved","oss-winnow-question-timeline.week.three.change.contradiction":"new contradiction: page against feed","oss-winnow-question-timeline.week.three.source":"source replaced with a supported API","oss-winnow-question-timeline.lane.changes":"change timeline","oss-winnow-question-timeline.lane.source":"source-path changes","oss-winnow-question-timeline.band.left":"a different answer can be correct","oss-winnow-question-timeline.band.right":"a change set, not a fresh pile","oss-winnow-rate-state.kicker.label":"One host","oss-winnow-rate-state.kicker.sub":"the state that prices the next request","oss-winnow-rate-state.tag":"CONTROL","oss-winnow-rate-state.row.healthy.signal":"Healthy response","oss-winnow-rate-state.row.healthy.effect":"normal allocation","oss-winnow-rate-state.row.healthy.retained":"latency and success sample","oss-winnow-rate-state.row.latency.signal":"Rising latency","oss-winnow-rate-state.row.latency.effect":"reduced share","oss-winnow-rate-state.row.latency.retained":"smoothed trend","oss-winnow-rate-state.row.rate.signal":"Rate response","oss-winnow-rate-state.row.rate.effect":"defer and back off","oss-winnow-rate-state.row.rate.retained":"reset or retry window","oss-winnow-rate-state.row.refusal.signal":"Repeated refusal","oss-winnow-rate-state.row.refusal.effect":"open circuit","oss-winnow-rate-state.row.refusal.retained":"cooldown and trial state","oss-winnow-rate-state.foot.left":"a refusal is not a slow success","oss-winnow-rate-state.foot.right":"and the distinction survives","oss-winnow-records-not-screenshots.chrome.path":"Records, not screenshots","oss-winnow-records-not-screenshots.chrome.status":"typed records, sources attached","oss-winnow-records-not-screenshots.chrome.meta":"illustrative","oss-winnow-records-not-screenshots.pile.label":"raw material in","oss-winnow-records-not-screenshots.pile.search":"search result pages","oss-winnow-records-not-screenshots.pile.registry":"registry HTML","oss-winnow-records-not-screenshots.pile.feed":"feed entries","oss-winnow-records-not-screenshots.pile.sheet":"spreadsheet cells","oss-winnow-records-not-screenshots.queue.label":"review queue","oss-winnow-records-not-screenshots.card.label.event":"event","oss-winnow-records-not-screenshots.card.label.effective":"effective","oss-winnow-records-not-screenshots.card.label.source":"source","oss-winnow-records-not-screenshots.card.label.support":"support","oss-winnow-records-not-screenshots.card.one.id":"company 0448-2216","oss-winnow-records-not-screenshots.card.one.state":"supported","oss-winnow-records-not-screenshots.card.one.event":"new filing","oss-winnow-records-not-screenshots.card.one.effective":"2026-07-24","oss-winnow-records-not-screenshots.card.one.source":"company register","oss-winnow-records-not-screenshots.card.one.support":"2 supporting sources","oss-winnow-records-not-screenshots.card.two.id":"company 1187-3092","oss-winnow-records-not-screenshots.card.two.state":"unresolved","oss-winnow-records-not-screenshots.card.two.event":"ownership change","oss-winnow-records-not-screenshots.card.two.effective":"2026-07-22","oss-winnow-records-not-screenshots.card.two.source":"news feed","oss-winnow-records-not-screenshots.card.two.support":"1 supporting source","oss-winnow-records-not-screenshots.card.two.flag":"unresolved: contradicting notice","oss-winnow-records-not-screenshots.serialise.label":"one record, two serialisations","oss-winnow-records-not-screenshots.serialise.jsonl.tag":"JSONL, pipeline","oss-winnow-records-not-screenshots.serialise.jsonl.line":"{\"supplier\":\"0448-2216\",\"change\":\"new_filing\",\"effective_at\":\"2026-07-24\",\"support_state\":\"supported\"}","oss-winnow-records-not-screenshots.serialise.csv.tag":"CSV, analyst","oss-winnow-records-not-screenshots.serialise.csv.line":"0448-2216,new_filing,2026-07-24,supported","oss-winnow-records-not-screenshots.trail.label":"source trail, card one","oss-winnow-records-not-screenshots.trail.register":"register page, filing 2026-1187","oss-winnow-records-not-screenshots.trail.feed":"feed entry, observed 09:15","oss-winnow-records-not-screenshots.untouched.label":"existing systems","oss-winnow-records-not-screenshots.untouched.warehouse":"data warehouse","oss-winnow-records-not-screenshots.untouched.review":"review process","oss-winnow-records-not-screenshots.untouched.mark":"untouched","oss-winnow-records-not-screenshots.band.left":"the format changes, the record stays","oss-winnow-records-not-screenshots.band.right":"five output formats","oss-winnow-recurrence-card.kicker.label":"Recurring question","oss-winnow-recurrence-card.kicker.sub":"current operating state","oss-winnow-recurrence-card.tag":"CADENCE","oss-winnow-recurrence-card.mode.label":"mode","oss-winnow-recurrence-card.mode.value":"daily plus live feed","oss-winnow-recurrence-card.mode.use":"the freshness expectation","oss-winnow-recurrence-card.tally.label":"changes, to the review queue","oss-winnow-recurrence-card.tally.added":"3 added","oss-winnow-recurrence-card.tally.changed":"1 changed","oss-winnow-recurrence-card.tally.removed":"2 removed","oss-winnow-recurrence-card.row.last-run.name":"last run","oss-winnow-recurrence-card.row.last-run.value":"completed with one source unavailable","oss-winnow-recurrence-card.row.last-run.use":"operational context","oss-winnow-recurrence-card.row.unresolved.name":"unresolved","oss-winnow-recurrence-card.row.unresolved.value":"one contradiction","oss-winnow-recurrence-card.row.unresolved.use":"a human decision","oss-winnow-recurrence-card.foot.left":"the question stays","oss-winnow-recurrence-card.foot.right":"the answer is allowed to move","oss-winnow-risk-brief.statusDefault":"On by default","oss-winnow-risk-brief.statusAlways":"Always on","oss-winnow-risk-brief.statusChoice":"Your choice","oss-winnow-risk-brief.0a5aad940f":"Upsetting a website or getting blocked","oss-winnow-risk-brief.7280e2260c":"It honours each site rulebook and waits its turn. Rate limits and the robots policy are on from the start.","oss-winnow-risk-brief.ea8dfab00e":"Personal data ending up where it should not","oss-winnow-risk-brief.60b9cfaa36":"Personal details can be pseudonymised as they are gathered, so raw identifiers are not carried through by default.","oss-winnow-risk-brief.8a4bf96eb9":"Requests reaching unsafe internal addresses","oss-winnow-risk-brief.7593afa921":"Protection against unsafe destinations blocks private network ranges in every address it is given.","oss-winnow-risk-brief.d06cab6007":"No record of what was collected","oss-winnow-risk-brief.c6a7d72817":"Every request is logged with its source, address, time, and result, so you have an answer ready if anyone asks.","oss-winnow-risk-brief.c84b02be52":"Data leaving your jurisdiction","oss-winnow-risk-brief.0fbf6a29ac":"It can run entirely inside Europe on infrastructure you control, so gathered data need not cross a border.","oss-winnow-risk-brief.d4b4623244":"Your lawful basis","oss-winnow-risk-brief.91c680eb22":"The reason you are allowed to collect a given dataset is a decision only you can make. The tool enforces politeness, not your legal purpose.","oss-winnow-risk-brief.63a8eda1e9":"What you keep","oss-winnow-risk-brief.32dfa57d40":"How much you gather and how long you keep it are your data minimisation and retention choices, set by your policy, not by the library.","oss-winnow-risk-brief.80c03e9024":"No certification claim","oss-winnow-risk-brief.8e1e19fafd":"We do not claim a compliance certificate, because a library cannot make that determination for you. What we provide is an honest, auditable posture.","oss-winnow-risk-brief.311a8d642c":"Risk and compliance","oss-winnow-risk-brief.45a5a99148":"What it handles, and what stays your call.","oss-winnow-risk-brief.12cafee013":"Honest by construction","oss-winnow-risk-brief.9ecca79960":"Handled by default","oss-winnow-risk-brief.531e456560":"Always on","oss-winnow-risk-brief.6d1183afb6":"Stays your decision","oss-winnow-risk-brief.6aaacbf657":"The run record shows the source, policy decisions, retries, and result, so operations can review what happened without reconstructing it from memory.","oss-winnow-risk-brief.45ac82f360":"Auditable","oss-winnow-risk-brief.305bc17334":"Handled and yours","oss-winnow-scraper-collector-pair.chrome.path":"A page and a stream","oss-winnow-scraper-collector-pair.chrome.status":"two lifecycles, one output rail","oss-winnow-scraper-collector-pair.chrome.meta":"SCRAPER + COLLECTOR","oss-winnow-scraper-collector-pair.type.string":"string","oss-winnow-scraper-collector-pair.type.array":"array","oss-winnow-scraper-collector-pair.type.date":"date","oss-winnow-scraper-collector-pair.type.url":"URL","oss-winnow-scraper-collector-pair.type.datetime":"datetime","oss-winnow-scraper-collector-pair.type.object":"object","oss-winnow-scraper-collector-pair.type.real":"fixed-point decimal","oss-winnow-scraper-collector-pair.scraper.head":"maintained scraper","oss-winnow-scraper-collector-pair.scraper.source":"company register page","oss-winnow-scraper-collector-pair.scraper.field.companyNumber":"company number","oss-winnow-scraper-collector-pair.scraper.field.legalName":"legal name","oss-winnow-scraper-collector-pair.scraper.field.status":"status","oss-winnow-scraper-collector-pair.scraper.field.officers":"officers","oss-winnow-scraper-collector-pair.scraper.field.filingDate":"filing date","oss-winnow-scraper-collector-pair.scraper.field.sourceReference":"source reference","oss-winnow-scraper-collector-pair.collector.head":"native collector","oss-winnow-scraper-collector-pair.collector.link.connected":"connected","oss-winnow-scraper-collector-pair.collector.link.fault":"fault","oss-winnow-scraper-collector-pair.collector.link.reconnected":"reconnected","oss-winnow-scraper-collector-pair.collector.dedupe":"message IDs deduplicated","oss-winnow-scraper-collector-pair.collector.payload":"vessel position payload","oss-winnow-scraper-collector-pair.collector.field.timestamp":"timestamp","oss-winnow-scraper-collector-pair.collector.field.coordinates":"coordinates","oss-winnow-scraper-collector-pair.collector.field.course":"course","oss-winnow-scraper-collector-pair.collector.field.source":"source","oss-winnow-scraper-collector-pair.fallback.head":"generic extractor","oss-winnow-scraper-collector-pair.fallback.mark":"generic","oss-winnow-scraper-collector-pair.fallback.source":"unknown page","oss-winnow-scraper-collector-pair.fallback.return.title":"title","oss-winnow-scraper-collector-pair.fallback.return.description":"description","oss-winnow-scraper-collector-pair.fallback.return.schemaOrg":"Schema.org object","oss-winnow-scraper-collector-pair.fallback.return.headings":"headings","oss-winnow-scraper-collector-pair.fallback.return.links":"links","oss-winnow-scraper-collector-pair.fallback.note":"Broad extraction for unknown pages, marked as a fallback rather than maintained schema knowledge.","oss-winnow-scraper-collector-pair.rail.label":"one output rail","oss-winnow-scraper-collector-pair.rail.questionId":"question ID","oss-winnow-scraper-collector-pair.rail.sourceId":"source ID","oss-winnow-scraper-collector-pair.rail.runId":"run ID","oss-winnow-scraper-collector-pair.rail.note":"lifecycles remain visible above the rail","oss-winnow-scraper-collector-pair.band.text":"schema is a promise about output","oss-winnow-scraper-collector-pair.band.meta":"maintained knowledge, one result boundary","oss-winnow-shared-rate-controller.chrome.path":"One shared rate limit","oss-winnow-shared-rate-controller.chrome.meta":"one workload, two readings","oss-winnow-shared-rate-controller.status.shared":"every lane waits on the same operating state","oss-winnow-shared-rate-controller.status.private":"four private limiters, no shared state","oss-winnow-shared-rate-controller.tabs.label":"Readings","oss-winnow-shared-rate-controller.tab.shared.label":"Shared controller","oss-winnow-shared-rate-controller.tab.shared.note":"one global channel, four lanes","oss-winnow-shared-rate-controller.tab.private.label":"Four private limiters","oss-winnow-shared-rate-controller.tab.private.note":"the same workload, no shared state","oss-winnow-shared-rate-controller.lane.scraper":"Register scraper","oss-winnow-shared-rate-controller.lane.crawler":"Site crawler","oss-winnow-shared-rate-controller.lane.rss":"RSS collector","oss-winnow-shared-rate-controller.lane.api":"API collector","oss-winnow-shared-rate-controller.chip.slowing":"slowing, share reduced","oss-winnow-shared-rate-controller.chip.healthy":"healthy, normal allocation","oss-winnow-shared-rate-controller.chip.idle":"idle, nothing reserved","oss-winnow-shared-rate-controller.chip.deferred":"deferred until its window","oss-winnow-shared-rate-controller.chip.withinPolicy":"within policy","oss-winnow-shared-rate-controller.acquire":"acquire before send","oss-winnow-shared-rate-controller.limiter":"private limiter","oss-winnow-shared-rate-controller.ticks.idle":"no requests","oss-winnow-shared-rate-controller.ticks.window":"deferred to the declared window","oss-winnow-shared-rate-controller.channel.label":"global allowance","oss-winnow-shared-rate-controller.channel.note":"every lane acquires first","oss-winnow-shared-rate-controller.state.return":"status and latency return to the same operating state","oss-winnow-shared-rate-controller.log.title":"the same host, one access log","oss-winnow-shared-rate-controller.log.actual":"combined traffic","oss-winnow-shared-rate-controller.log.intended":"intended host rate","oss-winnow-shared-rate-controller.perspective.shared":"what the controller sees","oss-winnow-shared-rate-controller.perspective.private":"what the host sees","oss-winnow-shared-rate-controller.readout.shared":"Every lane acquires from one global allowance before sending, and every response returns status and latency to the same operating state. The register lane slows and receives a smaller share, the API lane defers until its declared window, and the idle feed reserves nothing it is not using.","oss-winnow-shared-rate-controller.readout.private":"The same workload as four private limiters: each lane stays inside its own policy, yet the host's access log carries the reading that matters. Their combined traffic lands denser than the intended rate, because no limiter can see what the other three are doing.","oss-winnow-shared-rate-controller.band.left":"one controller gates source work","oss-winnow-shared-rate-controller.band.right":"global budget, domain circuit, adaptive rate","oss-winnow-source-contracts.kicker.label":"Two contracts","oss-winnow-source-contracts.kicker.sub":"one result boundary","oss-winnow-source-contracts.tag":"REGISTRY","oss-winnow-source-contracts.col.declares":"declares","oss-winnow-source-contracts.col.owns":"owns","oss-winnow-source-contracts.contract.scraper.name":"Scraper","oss-winnow-source-contracts.contract.scraper.declares":"ID, domains, category, schema, access requirements","oss-winnow-source-contracts.contract.scraper.owns":"page fetch, parse and field extraction","oss-winnow-source-contracts.contract.collector.name":"Collector","oss-winnow-source-contracts.contract.collector.declares":"source type, schema, cadence, auth, validation","oss-winnow-source-contracts.contract.collector.owns":"polling, streaming, reconnect and domain payload","oss-winnow-source-contracts.contract.fallback.name":"Fallback","oss-winnow-source-contracts.contract.fallback.mark":"generic","oss-winnow-source-contracts.contract.fallback.declares":"generic parser capability","oss-winnow-source-contracts.contract.fallback.owns":"metadata and broad text extraction","oss-winnow-source-contracts.foot.left":"breadth is maintained","oss-winnow-source-contracts.foot.right":"not magically permanent","oss-winnow-source-kinds.kicker.label":"Source kinds","oss-winnow-source-kinds.kicker.sub":"shared metadata, separate behaviour","oss-winnow-source-kinds.tag":"TYPES","oss-winnow-source-kinds.row.scraper.name":"Site scraper","oss-winnow-source-kinds.row.scraper.step.request":"request","oss-winnow-source-kinds.row.scraper.step.parse":"parse","oss-winnow-source-kinds.row.scraper.step.extract":"extract","oss-winnow-source-kinds.row.scraper.result":"maintained typed fields","oss-winnow-source-kinds.row.collector.name":"Native collector","oss-winnow-source-kinds.row.collector.step.poll":"poll","oss-winnow-source-kinds.row.collector.step.stream":"stream","oss-winnow-source-kinds.row.collector.step.reconnect":"reconnect","oss-winnow-source-kinds.row.collector.step.read":"read","oss-winnow-source-kinds.row.collector.result":"records and domain payloads","oss-winnow-source-kinds.row.search.name":"Search engine","oss-winnow-source-kinds.row.search.step.query":"query","oss-winnow-source-kinds.row.search.step.rank":"rank","oss-winnow-source-kinds.row.search.step.cache":"cache","oss-winnow-source-kinds.row.search.result":"candidate source locations","oss-winnow-source-kinds.row.crawler.name":"Crawler path","oss-winnow-source-kinds.row.crawler.step.traversal":"bounded graph traversal","oss-winnow-source-kinds.row.crawler.result":"pages, links and crawl state","oss-winnow-source-kinds.row.file.name":"File or dataset","oss-winnow-source-kinds.row.file.step.open":"open","oss-winnow-source-kinds.row.file.step.validate":"validate","oss-winnow-source-kinds.row.file.step.iterate":"iterate","oss-winnow-source-kinds.row.file.result":"rows, objects or archive entries","oss-winnow-source-kinds.foot.left":"one taxonomy","oss-winnow-source-kinds.foot.right":"without one lossy abstraction","oss-winnow-sourced-account.chrome.path":"An answer with its sources","oss-winnow-sourced-account.chrome.status":"5 lines, every one sourced","oss-winnow-sourced-account.chrome.meta":"illustrative","oss-winnow-sourced-account.question.label":"the question","oss-winnow-sourced-account.question.text":"when does the new town-centre cycle rule start?","oss-winnow-sourced-account.lines.ruleStarts.text":"The rule starts on 1 October","oss-winnow-sourced-account.lines.ruleStarts.chip":"official publication","oss-winnow-sourced-account.lines.covers.text":"It covers the town centre, weekdays 8:00 to 18:00","oss-winnow-sourced-account.lines.covers.chip":"official publication","oss-winnow-sourced-account.lines.settling.text":"Residents get a six-week settling-in period","oss-winnow-sourced-account.lines.settling.chip":"council explanation","oss-winnow-sourced-account.lines.signs.text":"Street signs go up from 15 September","oss-winnow-sourced-account.lines.signs.chip":"implementation timetable","oss-winnow-sourced-account.lines.enforcement.text":"Fines begin on 11 November","oss-winnow-sourced-account.lines.enforcement.chip":"implementation timetable","oss-winnow-sourced-account.trail.source.key":"source","oss-winnow-sourced-account.trail.source.value":"town gazette, official notices","oss-winnow-sourced-account.trail.date.key":"date","oss-winnow-sourced-account.trail.date.value":"published 14 September 2026","oss-winnow-sourced-account.trail.address.key":"address","oss-winnow-sourced-account.trail.address.value":"gazette.boroughbridge.example/notices/2026/147","oss-winnow-sourced-account.trail.passage.key":"passage used","oss-winnow-sourced-account.trail.passage.value":"The cycle rule takes effect on 1 October 2026.","oss-winnow-sourced-account.trail.hint":"every chip opens into a trail like this one","oss-winnow-sourced-account.method.label":"method view","oss-winnow-sourced-account.method.leftOut":"left out: an older summary of the same rule, kept here so you can see why","oss-winnow-sourced-account.band.left":"the account stays simple","oss-winnow-sourced-account.band.right":"inspection stays one action away","oss-winnow-spec-sheet.66639f7d45":"Binary","oss-winnow-spec-sheet.19675ee12c":"40 MB","oss-winnow-spec-sheet.8e5be69d50":"A single binary for Linux, macOS, and Windows. The core has no runtime dependencies. The optional stealth browser runs in an isolated Python virtual environment.","oss-winnow-spec-sheet.7d3f61fb0f":"Source coverage","oss-winnow-spec-sheet.d42cac0b8d":"1,325 scrapers","oss-winnow-spec-sheet.bd0e1ff000":"Site scrapers, search engine integrations, and native protocol collectors, every one typed to the same schema. Custom scrapers follow it too.","oss-winnow-spec-sheet.6677bdd8d5":"Output formats","oss-winnow-spec-sheet.d6df67ed2f":"5 formats","oss-winnow-spec-sheet.cd072ae9be":"text, json, jsonl, csv, and html. The typed output shape is consistent across every scraper, collector, and engine.","oss-winnow-spec-sheet.ed2c603813":"Politeness","oss-winnow-spec-sheet.cfcb53498f":"default on","oss-winnow-spec-sheet.2c043c60d7":"robots.txt parsed with a deny by default policy, per domain rate limiting matched to documented source policy, retry honoured.","oss-winnow-spec-sheet.fa1703dd78":"Audit","oss-winnow-spec-sheet.94f00422a0":"per request","oss-winnow-spec-sheet.ed065920c4":"Source, URL, timestamp, HTTP status, and a content hash recorded for every request. Exportable to a SIEM.","oss-winnow-spec-sheet.89b86ab0e6":"Language","oss-winnow-spec-sheet.e2ae20d9ae":"Rust","oss-winnow-spec-sheet.2207ff9840":"A Cargo workspace of single responsibility crates. Python and WebAssembly bindings ship alongside.","oss-winnow-spec-sheet.fef8e889dc":"Route model","oss-winnow-spec-sheet.6a51d6151a":"5 inputs, 4 stages, 5 outputs","oss-winnow-spec-sheet.b4404664ed":"Search engines, websites, APIs, feeds, and files pass through discovery, fetching, parsing, and typed output under one run record.","oss-winnow-spec-sheet.7d90748c8b":"Scrapers","oss-winnow-spec-sheet.7f5d63aa39":"Engines","oss-winnow-spec-sheet.d85fc8a070":"Collectors","oss-winnow-spec-sheet.8bee61f59e":"project sheet","oss-winnow-spec-sheet.fdc92d3df7":"One question becomes an explicit path from source selection to typed output.","oss-winnow-spec-sheet.b356313f97":"Interfaces","oss-winnow-spec-sheet.c825083511":"Four ways","oss-winnow-spec-sheet.3c3d84bfb1":"Run it as a binary, a Rust crate, a background service, or WebAssembly.","oss-winnow-spec-sheet.6ccb60071b":"Categories","oss-winnow-spec-sheet.8f11bdf9ce":"Crates","oss-winnow-stack-sprawl.glueLabel":"glue","oss-winnow-stack-sprawl.roleScrape":"Per-site spiders, pipelines, and middleware that drift when layouts change.","oss-winnow-stack-sprawl.roleBrowser":"A full browser runtime for dynamic pages, with a separate failure model.","oss-winnow-stack-sprawl.roleProxy":"Regional routing and session rotation with variable network behaviour.","oss-winnow-stack-sprawl.roleSearch":"One query shape, quota, key, and wrapper for every search engine.","oss-winnow-stack-sprawl.roleCurl":"Manual fetches for data portals without shared rate or robots controls.","oss-winnow-stack-sprawl.focusAdds":"adds","oss-winnow-stack-sprawl.c7c02ca208":"Scrapy","oss-winnow-stack-sprawl.2326fac36d":"x N sites","oss-winnow-stack-sprawl.d9feeabbe7":"Selenium","oss-winnow-stack-sprawl.0901b4221d":"x 1 fleet","oss-winnow-stack-sprawl.c93c899f12":"Proxy pool","oss-winnow-stack-sprawl.d7850d50b3":"x billing","oss-winnow-stack-sprawl.03b1f557dd":"SERP wrappers","oss-winnow-stack-sprawl.fdda8d29bb":"x N APIs","oss-winnow-stack-sprawl.ae6df4652b":"curl scripts","oss-winnow-stack-sprawl.19c3b4a40c":"x ad hoc","oss-winnow-stack-sprawl.f0b0cce0db":"Five config formats, five error models, and five output shapes.","oss-winnow-stack-sprawl.0c8f648788":"Politeness is per tool, easy to forget, easy to get banned.","oss-winnow-stack-sprawl.82b4e9b2d1":"No shared audit trail. Provenance is a retrofit.","oss-winnow-stack-sprawl.1090a1d800":"5 tools, 1 glue layer","oss-winnow-stack-sprawl.ae35101f46":"the glue is the project","oss-winnow-stack-sprawl.9ac395c38d":"Hidden cost","oss-winnow-stack-sprawl.e75d27fdf8":"to the bill and one more way to fail.","oss-winnow-stack-sprawl.0cd3da40aa":"5 tools, 5 ops surfaces","oss-winnow-stack-sprawl.ad46c23c45":"one 40 MB binary","oss-winnow-story-across-runs.chrome.path":"The answer can change","oss-winnow-story-across-runs.chrome.status":"resolved on the third check, one time open","oss-winnow-story-across-runs.chrome.meta":"three checks, illustrative","oss-winnow-story-across-runs.question.label":"your question","oss-winnow-story-across-runs.question.text":"Is the 08:10 still running on Sunday?","oss-winnow-story-across-runs.question.note":"asked once, shown on every check","oss-winnow-story-across-runs.run.1.date":"Sun 3 May","oss-winnow-story-across-runs.run.1.tag":"first check","oss-winnow-story-across-runs.run.1.answer":"Yes, the 08:10 runs on Sunday.","oss-winnow-story-across-runs.run.2.date":"Wed 6 May","oss-winnow-story-across-runs.run.2.tag":"second check","oss-winnow-story-across-runs.run.2.answer":"The 08:10 is shown as cancelled.","oss-winnow-story-across-runs.run.2.flag":"changed since your last check","oss-winnow-story-across-runs.run.3.date":"Fri 8 May","oss-winnow-story-across-runs.run.3.tag":"third check","oss-winnow-story-across-runs.run.3.answer":"Yes, the 08:10 runs on Sunday.","oss-winnow-story-across-runs.run.3.open":"replacement bus time still being checked","oss-winnow-story-across-runs.source.timetable.name":"Timetable","oss-winnow-story-across-runs.source.timetable.detail.first":"lists the 08:10 on Sundays","oss-winnow-story-across-runs.source.timetable.detail.later":"still lists the 08:10","oss-winnow-story-across-runs.source.notice.name":"Operator notice","oss-winnow-story-across-runs.source.notice.detail.early":"no changes posted","oss-winnow-story-across-runs.source.notice.detail.late":"updated, the 08:10 runs","oss-winnow-story-across-runs.source.feed.name":"Disruption feed","oss-winnow-story-across-runs.source.feed.detail.new":"reports a cancellation","oss-winnow-story-across-runs.source.feed.detail.late":"the cancellation is lifted","oss-winnow-story-across-runs.source.feed.ghost":"no disruption feed yet","oss-winnow-story-across-runs.chip.supporting":"supporting","oss-winnow-story-across-runs.chip.contradicting":"contradicting","oss-winnow-story-across-runs.chip.resolved":"resolved","oss-winnow-story-across-runs.answer.label":"the answer","oss-winnow-story-across-runs.band.left":"the answer moves with the sources","oss-winnow-story-across-runs.band.right":"open lines stay visible","oss-winnow-story-state.head.label":"Story state","oss-winnow-story-state.head.sub":"what a careful product can show","oss-winnow-story-state.head.tag":"Honest","oss-winnow-story-state.state.supported.name":"Supported","oss-winnow-story-state.state.supported.meaning":"the current selected sources support it","oss-winnow-story-state.state.mixed.name":"Mixed","oss-winnow-story-state.state.mixed.meaning":"some sources support it and some do not","oss-winnow-story-state.state.insufficient.name":"Insufficient","oss-winnow-story-state.state.insufficient.meaning":"there is not enough material yet","oss-winnow-story-state.state.changed.name":"Changed","oss-winnow-story-state.state.changed.meaning":"a later run found a different current state","oss-winnow-story-state.foot.left":"uncertainty is information","oss-winnow-story-state.foot.right":"not a display failure","oss-winnow-supplier-risk-graph.chrome.path":"A change in supplier risk","oss-winnow-supplier-risk-graph.chrome.status":"contradiction kept in the set","oss-winnow-supplier-risk-graph.chrome.meta":"illustrative","oss-winnow-supplier-risk-graph.question.label":"one question","oss-winnow-supplier-risk-graph.question.text":"Which suppliers published a material risk change this week?","oss-winnow-supplier-risk-graph.source.search.name":"search discovery","oss-winnow-supplier-risk-graph.source.search.returns":"a new regulatory notice","oss-winnow-supplier-risk-graph.source.search.kind":"search","oss-winnow-supplier-risk-graph.source.register-scraper.name":"company register scraper","oss-winnow-supplier-risk-graph.source.register-scraper.returns":"legal status and filing changes","oss-winnow-supplier-risk-graph.source.register-scraper.kind":"scraper","oss-winnow-supplier-risk-graph.source.sanctions-collector.name":"sanctions collector","oss-winnow-supplier-risk-graph.source.sanctions-collector.returns":"a structured list update","oss-winnow-supplier-risk-graph.source.sanctions-collector.kind":"collector","oss-winnow-supplier-risk-graph.source.news-feed.name":"news feed","oss-winnow-supplier-risk-graph.source.news-feed.returns":"a dated operational incident","oss-winnow-supplier-risk-graph.source.news-feed.kind":"feed","oss-winnow-supplier-risk-graph.source.published-file.name":"published PDF","oss-winnow-supplier-risk-graph.source.published-file.returns":"an official report, origin preserved","oss-winnow-supplier-risk-graph.source.published-file.kind":"file","oss-winnow-supplier-risk-graph.change-set.head":"one supplier change set","oss-winnow-supplier-risk-graph.item.notice.name":"new regulatory notice","oss-winnow-supplier-risk-graph.item.notice.trail":"search, regulator portal, observed 08:12, added","oss-winnow-supplier-risk-graph.item.status.name":"legal status and filing change","oss-winnow-supplier-risk-graph.item.status.trail":"register scraper, national company register, observed 08:14, supported","oss-winnow-supplier-risk-graph.item.sanctions.name":"sanctions list update","oss-winnow-supplier-risk-graph.item.sanctions.trail":"sanctions collector, consolidated list, observed 08:15, matched","oss-winnow-supplier-risk-graph.item.incident.name":"dated operational incident","oss-winnow-supplier-risk-graph.item.incident.trail":"news feed, trade wire, observed 08:16, contradicting","oss-winnow-supplier-risk-graph.item.incident.flag":"contradicts the official statement, kept attached","oss-winnow-supplier-risk-graph.item.statement.name":"official statement","oss-winnow-supplier-risk-graph.item.statement.trail":"published file, supplier report, origin preserved, retained","oss-winnow-supplier-risk-graph.band.left":"five source forms, one change set","oss-winnow-supplier-risk-graph.band.right":"merged, not flattened","oss-winnow-surface-matrix.kicker.label":"Surfaces","oss-winnow-surface-matrix.kicker.sub":"clients of the same source runtime","oss-winnow-surface-matrix.tag":"DEPLOY","oss-winnow-surface-matrix.surface.cli.name":"CLI","oss-winnow-surface-matrix.surface.cli.posture":"one-off and scheduled runs","oss-winnow-surface-matrix.surface.cli.capability":"release binary profile","oss-winnow-surface-matrix.surface.rust.name":"Rust","oss-winnow-surface-matrix.surface.rust.posture":"embedded source systems","oss-winnow-surface-matrix.surface.rust.capability":"selected crates and features","oss-winnow-surface-matrix.surface.http.name":"HTTP","oss-winnow-surface-matrix.surface.http.posture":"shared internal service","oss-winnow-surface-matrix.surface.http.capability":"service middleware and endpoints","oss-winnow-surface-matrix.surface.python.name":"Python","oss-winnow-surface-matrix.surface.python.posture":"analysis and batch integration","oss-winnow-surface-matrix.surface.python.capability":"binding-exposed operations","oss-winnow-surface-matrix.surface.wasm.name":"WebAssembly","oss-winnow-surface-matrix.surface.wasm.posture":"browser, Deno or edge-supported paths","oss-winnow-surface-matrix.surface.wasm.capability":"WASM-compatible operations","oss-winnow-surface-matrix.surface.distributed.name":"Distributed","oss-winnow-surface-matrix.surface.distributed.posture":"large source and processing graphs","oss-winnow-surface-matrix.surface.distributed.capability":"worker and transport profile","oss-winnow-surface-matrix.footline.left":"deployment may change","oss-winnow-surface-matrix.footline.right":"the question remains identifiable","oss-winnow-surfaces.tagBinary":"one binary","oss-winnow-surfaces.tagNative":"native embed","oss-winnow-surfaces.tagService":"HTTP service","oss-winnow-surfaces.tagEdge":"browser and edge","oss-winnow-surfaces.66639f7d45":"Binary","oss-winnow-surfaces.d51abbec77":"A single 40 MB binary. The core needs no runtime dependencies. The optional stealth browser runs in its own isolated Python virtual environment.","oss-winnow-surfaces.6be9b8fe75":"# one binary, Linux, macOS, Windows","oss-winnow-surfaces.01b01706b0":"winnow scrape https://example.com --format json","oss-winnow-surfaces.9f31ceb689":"winnow search \"rust\" --engines duck,arxiv --scrape","oss-winnow-surfaces.e59bb751ae":"winnow crawl https://site.tld --depth 2","oss-winnow-surfaces.3baa6b53b4":"wrote 142 typed records to stdout","oss-winnow-surfaces.1988245002":"Subcommands: scrape, search, crawl, research, collect.","oss-winnow-surfaces.7afbd890ed":"winnow install-browser adds the optional stealth subsystem.","oss-winnow-surfaces.2180b3e7ce":"Crate","oss-winnow-surfaces.1d14db37f0":"Embed the parsing engine and scrapers as Rust crates. CSS3 selectors, a streaming parser, and typed field extraction with no subprocess overhead.","oss-winnow-surfaces.d31e0138fb":"# Cargo.toml","oss-winnow-surfaces.309f0835b2":"dweve-winnow-core = \"*\"","oss-winnow-surfaces.e705b49466":"dweve-winnow-scrapers = \"*\"","oss-winnow-surfaces.426efa7f9e":"# main.rs","oss-winnow-surfaces.6627696ef7":"let rec = scraper.extract(&html, &url)?;","oss-winnow-surfaces.25dcc2cfc9":"A Cargo workspace of 20 single responsibility crates.","oss-winnow-surfaces.b72a320587":"Each scraper implements one typed Scraper trait.","oss-winnow-surfaces.329cb8b6ba":"Service","oss-winnow-surfaces.a4b3755024":"Run Winnow as a long running HTTP service built on axum, with distributed task coordination for fan out across workers.","oss-winnow-surfaces.fbbf9550f3":"# dweve-winnow-api, axum server","oss-winnow-surfaces.62f2a4416e":"winnow api --bind 0.0.0.0:8080","oss-winnow-surfaces.c7c11a0de5":"listening, distributed coordinator ready","oss-winnow-surfaces.4e72a940f8":"curl :8080/scrape -d url=https://...","oss-winnow-surfaces.102e4514eb":"200 OK, typed JSON record","oss-winnow-surfaces.8d87334119":"dweve-winnow-distributed coordinates tasks across workers.","oss-winnow-surfaces.72bd80b6ff":"Every fetch is recorded with source, status, and hash.","oss-winnow-surfaces.4e946026a7":"WASM","oss-winnow-surfaces.4459108e16":"WebAssembly bindings via wasm-bindgen for browser and edge builds, plus Python bindings via PyO3 for notebooks and data pipelines.","oss-winnow-surfaces.ceb0ee03cd":"# dweve-winnow-wasm, wasm-bindgen","oss-winnow-surfaces.1ce376b802":"import init, { scrape } from \"winnow\";","oss-winnow-surfaces.e6d1845d9a":"const rec = scrape(html, url);","oss-winnow-surfaces.518afe093d":"# dweve-winnow-py, PyO3","oss-winnow-surfaces.0d550514d2":"from winnow import scrape","oss-winnow-surfaces.4e8ffa37fc":"dweve-winnow-py exposes the engine to Python via PyO3.","oss-winnow-surfaces.d97366c5b7":"Same extraction logic in the browser and at the edge.","oss-winnow-surfaces.d0d0470c65":"linePrompt","oss-winnow-surfaces.f48a58368d":"lineComment","oss-winnow-surfaces.14a15523af":"lineOut","oss-winnow-surfaces.c37a36f31b":"4 surfaces, one engine","oss-winnow-surfaces.6b5eb5323e":"CLI, Rust, HTTP and WASM","oss-winnow-surfaces.92b482d978":"Integration surfaces","oss-winnow-surfaces.33c3304214":"The same scrapers and the same output shape work in every surface.","oss-winnow-surfaces.56fb165f83":"no external service required","oss-winnow-tidy-result.80296d87ee":"That is the whole idea: you ask a plain question and you get back a plain answer\n          you can read, keep, and trust.","oss-winnow-tidy-result.7c920befeb":"Gathered politely, with a record of every page visited","oss-winnow-tidy-result.807ac13338":"4 results","oss-winnow-tidy-result.0ed53214e8":"Your tidy list","oss-winnow-tidy-result.3a3bb1beac":"This is the kind of answer Winnow hands you. Imagine you asked where to find a\n            kettle nearby. Instead of a stack of websites to read, you get a clean little\n            list like this one.","oss-winnow-tidy-result.f376a3f548":"A neat list, not a heap of pages.","oss-winnow-tidy-result.1251cc0dd7":"What comes back","oss-winnow-tidy-result.2c96d17cd1":"You can save it, print it, or open it later. The answer is a small tidy file, not something that disappears when you close a window.","oss-winnow-tidy-result.12df5bb228":"Yours to keep","oss-winnow-tidy-result.62cff08bdf":"Every fact carries the page it was read from, so you can always see the source and check it yourself if you wish.","oss-winnow-tidy-result.3354d26dc0":"It says where it came from","oss-winnow-tidy-result.c702175fa9":"No wall of text to wade through. Each item sits on its own tidy line, the way a shopping receipt lists what you bought.","oss-winnow-tidy-result.f36d598976":"One line per thing","oss-winnow-tidy-result.dd85c748bb":"Order online, 2 day wait","oss-winnow-tidy-result.a232b15dea":"Market Square Shop","oss-winnow-tidy-result.61c0473b59":"Two left, open until 5","oss-winnow-tidy-result.f13f822915":"Green Lane DIY","oss-winnow-tidy-result.91bb2253f2":"In stock, click and collect","oss-winnow-tidy-result.ae46ebd31a":"Town Centre Tools","oss-winnow-tidy-result.233da1dc79":"In stock, open until 6","oss-winnow-tidy-result.cef6c0cdb2":"Riverside Hardware","oss-winnow-tidy-result.7099b8c786":"One line each","oss-winnow-tidy-result.780e4f3a32":"The tidy answer, with its source beside it.","oss-winnow-two-parser-contracts.chrome.path":"Two parsers, one source","oss-winnow-two-parser-contracts.chrome.status":"same source ID, two parser paths","oss-winnow-two-parser-contracts.chrome.meta":"ILLUSTRATIVE","oss-winnow-two-parser-contracts.input.name":"Public filing archive","oss-winnow-two-parser-contracts.input.size":"300 MB","oss-winnow-two-parser-contracts.input.sourceId":"source ID filing-archive","oss-winnow-two-parser-contracts.input.contentId":"content ID 9c41 e2af","oss-winnow-two-parser-contracts.dom.head":"Full DOM profile","oss-winnow-two-parser-contracts.dom.arenaLabel":"arena-backed tree","oss-winnow-two-parser-contracts.dom.interned":"interned tags","oss-winnow-two-parser-contracts.dom.idIndex":"ID index","oss-winnow-two-parser-contracts.dom.classIndex":"class index","oss-winnow-two-parser-contracts.dom.selectorsLabel":"selectors over the completed tree","oss-winnow-two-parser-contracts.dom.memLabel":"memory","oss-winnow-two-parser-contracts.dom.memNote":"grows with the document","oss-winnow-two-parser-contracts.stream.head":"Streaming profile","oss-winnow-two-parser-contracts.stream.bufferLabel":"bounded buffer","oss-winnow-two-parser-contracts.stream.chunk1":"chunk 1","oss-winnow-two-parser-contracts.stream.chunk2":"chunk 2","oss-winnow-two-parser-contracts.stream.chunk3":"chunk 3","oss-winnow-two-parser-contracts.stream.chunk4":"chunk 4","oss-winnow-two-parser-contracts.stream.elem":"one element","oss-winnow-two-parser-contracts.stream.bufferNote":"An element crossing a chunk boundary is held in handler state.","oss-winnow-two-parser-contracts.stream.handlersLabel":"handlers receive chunks","oss-winnow-two-parser-contracts.stream.handlerSection":"section","oss-winnow-two-parser-contracts.stream.handlerTable":"table","oss-winnow-two-parser-contracts.stream.handlerFiling":"filing entry","oss-winnow-two-parser-contracts.stream.memLabel":"memory","oss-winnow-two-parser-contracts.stream.memNote":"bounded working set","oss-winnow-two-parser-contracts.receipts.label":"both outputs carry the same source identity","oss-winnow-two-parser-contracts.receipts.dom":"parser path dom, arena and index fields","oss-winnow-two-parser-contracts.receipts.stream":"parser path streaming, chunk and handler fields","oss-winnow-two-parser-contracts.rail.label":"streaming lifecycle, enforced through typestate","oss-winnow-two-parser-contracts.rail.tag":"illustrative","oss-winnow-two-parser-contracts.rail.configure.name":"configure","oss-winnow-two-parser-contracts.rail.configure.method":"register handlers","oss-winnow-two-parser-contracts.rail.process.name":"process","oss-winnow-two-parser-contracts.rail.process.method":"write chunks","oss-winnow-two-parser-contracts.rail.finish.name":"finish","oss-winnow-two-parser-contracts.rail.finish.method":"read results","oss-winnow-two-parser-contracts.rail.note":"Chunks can only be written while processing, and results become available after finish. Invalid lifecycle calls are unrepresentable in ordinary use.","oss-winnow-two-parser-contracts.band.text":"separate contracts for separate workloads","oss-winnow-two-parser-contracts.band.meta":"the receipt records which path ran","oss-winnow-typed-value.kicker.label":"One field","oss-winnow-typed-value.kicker.sub":"value, type and route","oss-winnow-typed-value.tag":"RESULT","oss-winnow-typed-value.field.publishedAt.name":"published_at","oss-winnow-typed-value.field.publishedAt.type":"datetime","oss-winnow-typed-value.field.publishedAt.context":"source timezone and parser","oss-winnow-typed-value.field.price.name":"price","oss-winnow-typed-value.field.price.type":"fixed-point decimal","oss-winnow-typed-value.field.price.context":"currency and source field","oss-winnow-typed-value.field.location.name":"location","oss-winnow-typed-value.field.location.type":"object","oss-winnow-typed-value.field.location.context":"notation, coordinate pair and source span","oss-winnow-typed-value.field.entities.name":"entities","oss-winnow-typed-value.field.entities.type":"array","oss-winnow-typed-value.field.entities.context":"mentions, clusters and match scores","oss-winnow-typed-value.footline.left":"typed enough for code","oss-winnow-typed-value.footline.right":"sourced enough for review","oss-winnow-value-brief.1d0ec533c9":"Route recorded","oss-winnow-value-brief.e92043500f":"Governed collection","oss-winnow-value-brief.189ff1fa37":"route inspector","oss-winnow-value-brief.3915907107":"Source scope","oss-winnow-value-brief.3d168eda20":"5 output modes","oss-winnow-value-brief.ab29f586fe":"Parsing and normalisation produce JSON, CSV, streams, stored records, or a workflow-specific response.","oss-winnow-value-brief.2fcde4b07e":"Typed result","oss-winnow-value-brief.608e403dc1":"Default on","oss-winnow-value-brief.0e8be3593e":"Source rules, rate limits, and protection against unsafe addresses are enforced from the start. Your team does not have to remember to add those controls to every run.","oss-winnow-value-brief.08229d55f8":"Risk handled by default","oss-winnow-value-brief.b37991fb60":"Fewer invoices","oss-winnow-value-brief.d82d798511":"The tools it replaces each carry their own subscription and their own invoice. Folding them into one self-hosted binary removes those recurring line items.","oss-winnow-value-brief.f7efc757f6":"Fewer bills to manage","oss-winnow-value-brief.61752f9a93":"5 to 1","oss-winnow-value-brief.5b88b6bf58":"It replaces a stack of separate scraping tools, browser automation, proxy services, and the maintenance scripts that glue them together. One thing to learn, one thing to run.","oss-winnow-value-brief.a9243f87cf":"One tool, not five","oss-winnow-value-brief.35a0ab3b85":"4 stages","oss-winnow-value-brief.45ce947628":"Rate limits, robots policy, retries, and unsafe-address protection apply across the route.","oss-winnow-value-brief.870c4d024a":"Shared fetch policy","oss-winnow-value-brief.6b5eb5323e":"5 input types","oss-winnow-value-brief.d11150cc87":"Search engines, websites, APIs, feeds, and files enter one named collection run.","oss-winnow-value-brief.936aebfaab":"One question, one recorded route","oss-winnow-value-brief.9f4a2b81ba":"Winnow turns a recurring question into an inspectable path from source selection to typed output.","oss-winnow-value-brief.df813684db":"What operations can inspect","oss-winnow-where-it-looked.kicker.label":"Where it looked","oss-winnow-where-it-looked.kicker.sub":"shown in plain language","oss-winnow-where-it-looked.kicker.tag":"SOURCES","oss-winnow-where-it-looked.rows.timetable.source":"Official timetable","oss-winnow-where-it-looked.rows.timetable.chip":"scheduled services","oss-winnow-where-it-looked.rows.notice.source":"Operator notice","oss-winnow-where-it-looked.rows.notice.chip":"planned changes","oss-winnow-where-it-looked.rows.feed.source":"Disruption feed","oss-winnow-where-it-looked.rows.feed.chip":"current cancellation","oss-winnow-where-it-looked.rows.feed.state":"live now","oss-winnow-where-it-looked.rows.authority.source":"Local authority page","oss-winnow-where-it-looked.rows.authority.chip":"replacement transport information","oss-winnow-where-it-looked.foot.left":"different places underneath","oss-winnow-where-it-looked.foot.right":"one question above","oss-winnow-world-boundary.chrome.path":"The world is not a database","oss-winnow-world-boundary.chrome.status":"one question on the boundary","oss-winnow-world-boundary.chrome.meta":"illustrative","oss-winnow-world-boundary.internal.head":"Inside the organisation","oss-winnow-world-boundary.internal.column.table":"Table","oss-winnow-world-boundary.internal.column.owner":"Owner","oss-winnow-world-boundary.internal.column.schema":"Schema","oss-winnow-world-boundary.internal.invoices.table":"invoices","oss-winnow-world-boundary.internal.invoices.owner":"finance","oss-winnow-world-boundary.internal.invoices.schema":"ledger schema v4","oss-winnow-world-boundary.internal.inventory.table":"inventory","oss-winnow-world-boundary.internal.inventory.owner":"operations","oss-winnow-world-boundary.internal.inventory.schema":"stock schema v2","oss-winnow-world-boundary.internal.customers.table":"customers","oss-winnow-world-boundary.internal.customers.owner":"sales","oss-winnow-world-boundary.internal.customers.schema":"crm schema v7","oss-winnow-world-boundary.internal.note":"named tables, known owners, settled schemas","oss-winnow-world-boundary.external.head":"The outside world","oss-winnow-world-boundary.external.government-portal":"government portal","oss-winnow-world-boundary.external.company-register":"company register","oss-winnow-world-boundary.external.rss-feed":"RSS feed","oss-winnow-world-boundary.external.csv-file":"CSV file","oss-winnow-world-boundary.external.rendered-dashboard":"rendered dashboard","oss-winnow-world-boundary.external.websocket-stream":"WebSocket stream","oss-winnow-world-boundary.external.search-result":"search result","oss-winnow-world-boundary.external.note":"different dates, identifiers, terms and update rhythms","oss-winnow-world-boundary.question.label":"a recurring market question","oss-winnow-world-boundary.question.text":"Which products moved in price this week?","oss-winnow-world-boundary.crossing.manual.head":"carried by a person","oss-winnow-world-boundary.crossing.manual.price":"price fragment","oss-winnow-world-boundary.crossing.manual.date":"date fragment","oss-winnow-world-boundary.crossing.manual.name":"name fragment","oss-winnow-world-boundary.crossing.manual.note":"one fragment at a time, reshaped by hand","oss-winnow-world-boundary.crossing.winnow.head":"explicit source paths","oss-winnow-world-boundary.crossing.winnow.register":"register, typed","oss-winnow-world-boundary.crossing.winnow.feed":"feed, typed","oss-winnow-world-boundary.crossing.winnow.page":"page, typed","oss-winnow-world-boundary.crossing.winnow.contract":"one typed output contract","oss-winnow-world-boundary.crossing.winnow.note":"each path keeps its source and lifecycle","oss-winnow-world-boundary.band.left":"internal systems have tables","oss-winnow-world-boundary.band.right":"the outside world has sources","page-breadcrumb.c766e66518":"Breadcrumb","page-toc.7e439c353e":"On this page","section_st_a1_display-split.7c9a7c0610":"Detail","section_st_f1_cta-dark.90e40d5043":"Get started","toc-rail.f5cbdf6bfb":"Contents"}
