openvibers/openvibe.publishing Commits

openvibe-publishing 1.4.0: search-feed (record pages in OpenVibe.Search) (#19)

OP OpenVibers committed 10 Oct 2026 · tag v1.4.0 · 0 files, +0 −0

Adds `openvibe-publishing/search-feed` (1.4.0, additive). It lets the products whose pages are records (Work's job ads, Rent's listings, Help's articles, Inventory's definitions, Quest's quests) put those pages in OpenVibe.Search through the same publication glue the content products use. Plan T9: "Search: real documents from every product" and T19 compositions (Rent, Work and Help compose Search).

- `createSearchFeed({ owner, db, outbox, baseUrl, types })`: each type gives `page(row)`, `document(row)` and `rows(afterId, limit)`, plus an optional `exists(ids)`.
- `sync(t, type, row)` / `remove(t, type, id)` run on the write's transaction: one `search.index-document@1` (via `<owner>.index_document.*`) per change. An unchanged row sends nothing. `listed: false` is a tombstone, and nothing is sent for an id Search never had.
- `sweep()` sends every row in id order but re-sends only what changed, and tombstones ids whose row is gone. It uses one transaction per row; a failing row is counted and logged and the pass continues. Concurrent calls share one pass.
- Indexability follows the page's own robots (`noindex`) and expiry, not the article word-count gate.

Tests: `test/search-feed.test.js` (7 cases on PGlite, every event checked against the `search.index-document@1` and `events.event-envelope@1` contracts). Full suite green: 19/20 files, with postgres skipped because there are no containers.

This commit has no diff to show.