{"id":"pg_01M362MX7HTWS8YPVZJ3FR6BSF","space":"openvibe","slug":"openvibe-sources","url":"https://openvibe.wiki/w/openvibe/openvibe-sources","state":"published","visibility":"public","revision":1,"title":"OpenVibe.Sources","summary":"Source registry and ingestion workers with recorded provenance; alpha, not deployed, seeded sources disabled at the cited commit.","body_markdown":"**OpenVibe.Sources** is \"the source registry and the ingestion workers the publication products depend on\". Every item records where it came from, when it was retrieved and on what terms, and a failed fetch is recorded as a failure, never replaced by invented content. The README gives the status as **alpha** (roadmap Wave 14): it \"runs and is tested against stub sites; not deployed; the six seeded sources are disabled\". It names `sources.openvibe.network` as the domain, with health only on the public vhost and the API host-local; Sources has no public pages by design.\n\n## Purpose\n\nThe README states that News, Reviews, Deals, Coupons, Trade and AI summarisation all need outside material, and that Sources is the one place it enters the network. Products read items with provenance and decide, under their own review and indexability rules, what to publish.\n\n## What it owns\n\n- the source registry, in which each source carries terms, robots and license notes and a rate limit; a source cannot be enabled without a terms note;\n- ingestion: fetch runs, items and item revisions, the scheduler, and robots.txt and rate-limit state;\n- `sources.*` events.\n\nEach fetch attempt is recorded with an explicit state such as `ok`, `http_error`, `timeout` or `robots_denied`, and \"a failed run never creates or modifies an item\". Adapters read RSS, Atom, sitemaps, JSON-LD, mapped APIs and manually entered items.\n\n## What it does not own\n\nPublication decisions, AI summarisation, and legal clearance: a terms note records what a person verified and does not replace verifying.\n\n## Relationships\n\nCallers use [[OpenVibe.Network]] client-credentials tokens. Sources publishes its events through a transactional outbox to [[OpenVibe.Events]]. For sources marked `search_visibility: \"members\"`, raw items are indexed in [[OpenVibe.Search]] for staff only and always as `noindex`. The consuming products (News, Reviews, Deals, Coupons, Trade) do not exist yet. STATUS.json gives the runtime as Node 22, Express, better-sqlite3 and fast-xml-parser on port 4720. The license is AGPL-3.0.\n","published_at":"2026-09-23T02:48:49.650Z","revision_published_at":"2026-09-23T02:48:49.650Z","revision_created_at":"2026-09-23T02:48:49.649Z","authorship":{"mode":"imported","workflow":null,"reviewed":false},"infobox":[{"key":"repository","label":"Repository","type":"url","value":"https://github.com/OpenVibers/OpenVibe.Sources"},{"key":"status","label":"Status","type":"text","value":"alpha"},{"key":"deployment","label":"Deployment","type":"text","value":"not deployed"},{"key":"domain","label":"Domain","type":"text","value":"sources.openvibe.network"},{"key":"port","label":"Port","type":"number","value":4720},{"key":"runtime","label":"Runtime","type":"text","value":"node 22, express, better-sqlite3, fast-xml-parser"},{"key":"license","label":"License","type":"text","value":"AGPL-3.0"},{"key":"seeded_sources","label":"Seeded sources","type":"number","value":6},{"key":"enabled_sources","label":"Enabled sources","type":"number","value":0}],"citations":[{"url":"https://github.com/OpenVibers/OpenVibe.Sources/blob/f727a40c3f979f42b3625782b5b71c0ebdc5617a/README.md","title":"OpenVibe.Sources README (commit f727a40)","source_item_id":null,"retrieved_at":"2026-09-22T12:00:00.000Z","quote":"Runs and is tested against stub sites; not deployed; the six seeded sources are","license_note":null},{"url":"https://github.com/OpenVibers/OpenVibe.Sources/blob/f727a40c3f979f42b3625782b5b71c0ebdc5617a/STATUS.json","title":"OpenVibe.Sources STATUS.json (commit f727a40)","source_item_id":null,"retrieved_at":"2026-09-22T12:00:00.000Z","quote":"\"enabledSources\": 0","license_note":null}],"attachments":[],"links":[{"space":"openvibe","slug":"openvibe-events"},{"space":"openvibe","slug":"openvibe-network"},{"space":"openvibe","slug":"openvibe-search"}],"indexability":{"indexable":false,"reasons":["ai_generated_unreviewed"]}}