ReviewsIndexDocumentUpsertedPayload reviews.index_document.upserted@1
Generated at from
openvibe-contracts v0.34.2 and
openvibe-sdk v0.5.0.
- Version
- 1.0.0
- Owner
- reviews
- Visibility
- first-party
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/events/payloads/reviews.index_document.upserted.v1.json
reviews.index_document.upserted v1 (OpenVibe.Reviews server/reviews/service.js syncEntity, via openvibe-publishing/index-hooks indexEvent). The OpenVibe.Search document of an active entity page: the entity name as title, the published summary (or the entity description) as summary, the summary text and the aggregate's computation lines as body, facets kind / has_aggregate / sources, the published summary's authorship, provenance of up to 40 cited Sources items (plus the AI run of an AI-drafted summary), and the gate's indexability (noindex thin_content / unsourced until signals and a summary back the page). Sent whenever what Search should hold changed (the revision grows with every change), in the transaction of the change; the reconciliation at every start (reconcileIndex) re-sends only documents that differ. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: entity, id, revision: <document revision> }, visibility internal, priority important, actor service:reviews.
Fields
This schema has no named fields.
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: new-entity
{
"owner": "reviews",
"type": "entity",
"id": "ent_01M38GW2QD088TQ08VN985JTXT",
"revision": 1,
"deleted": false,
"visibility": "public",
"canonical_url": "https://openvibe.reviews/e/portal-2",
"title": "Portal 2",
"body": "",
"facets": {
"kind": "game",
"has_aggregate": false,
"sources": []
},
"provenance": [],
"publication_state": "published",
"published_at": "2026-09-20T11:55:00.000Z",
"updated_at": "2026-09-20T11:55:00.000Z",
"indexability": {
"decision": "noindex",
"reasons": [
"thin_content",
"unsourced"
]
}
}Valid: with-summary
{
"owner": "reviews",
"type": "entity",
"id": "ent_01M38GW32MMJWAVC9KPYXC759Y",
"revision": 3,
"deleted": false,
"visibility": "public",
"canonical_url": "https://openvibe.reviews/e/widget-3000",
"title": "Widget 3000",
"summary": "Shoppers at the one sampled store rate this widget well on average, with over a hundred ratings behind that average, according to the listing.",
"body": "Shoppers at the one sampled store rate this widget well on average, with over a hundred ratings behind that average, according to the listing.\nrating: 84% = Σ(value ÷ best × count) ÷ Σ count over 1 signal and 120 ratings; on the shared 5-point scale: 4.2 = Σ(value × count) ÷ Σ count",
"facets": {
"kind": "product",
"has_aggregate": true,
"sources": [
"shop-example"
]
},
"authorship": "ai_generated",
"provenance": [
{
"service": "ai",
"type": "run",
"id": "run_01J9ZZZZZZZZZZZZZZZZZZZZZZ",
"label": "reviews.summarize_entity"
},
{
"service": "sources",
"type": "item",
"id": "itm_01M2ZB05BG9JCWV5MRXRD4ZTBG",
"url": "https://shop.example/p/widget",
"retrieved_at": "2026-09-20T12:00:06.000Z"
}
],
"publication_state": "published",
"published_at": "2026-09-20T11:58:00.000Z",
"updated_at": "2026-09-20T12:10:00.000Z",
"indexability": {
"decision": "index",
"reasons": []
}
}Rejected: other-owner
{
"owner": "wiki",
"type": "entity",
"id": "ent_01M38GW2QD088TQ08VN985JTXT",
"revision": 1,
"deleted": false,
"visibility": "public",
"canonical_url": "https://openvibe.reviews/e/portal-2",
"title": "Portal 2",
"body": "",
"facets": {
"kind": "game",
"has_aggregate": false,
"sources": []
},
"provenance": [],
"publication_state": "published",
"published_at": null,
"updated_at": null,
"indexability": {
"decision": "noindex",
"reasons": [
"thin_content",
"unsourced"
]
}
}Rejected: summary-type
{
"owner": "reviews",
"type": "summary",
"id": "sum_01M38GW34CFNJCVW5PQEN5W1JA",
"revision": 1,
"deleted": false,
"visibility": "public",
"canonical_url": "https://openvibe.reviews/e/portal-2",
"title": "Portal 2",
"body": "",
"facets": {},
"provenance": [],
"publication_state": "published",
"published_at": null,
"updated_at": null,
"indexability": {
"decision": "index",
"reasons": []
}
}Rejected: tombstone-as-upsert
{
"owner": "reviews",
"type": "entity",
"id": "ent_01M38GW372A3PM7110AHHTYM7C",
"revision": 4,
"deleted": true
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('reviews.index_document.upserted@1', value); // { valid, errors: [{ path, message }] }