ReviewsSignalRemovedPayload reviews.signal.removed@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.signal.removed.v1.json

reviews.signal.removed v1 (OpenVibe.Reviews server/reviews/service.js withdrawSignal → signalEvent). A signal stopped being active, in the transaction of the change. status superseded: a newer revision of the same item replaced it for the same entity (replaced_by names the new signal, whose reviews.signal.added follows). status withdrawn: its source removed the item (sources.item.removed or a removed item on import), the item no longer states a signal, or an editor reattributed or unresolved the item. The payload repeats the signal as recorded (values and provenance never change) plus status and reason; summaries citing it are flagged and get a pending revision, and the entity's aggregate and Search document are refreshed, in the same transaction. Envelope: subject { type: signal, id: <signal_id> }, visibility public, priority important, actor the caller (the importing service, e.g. service:sources-sync, or the editor, user usr_…) or service:reviews for the Sources event consumer and sync worker.

Fields

FieldTypeRequiredDescriptionConstraints
signal_idstringyes
  • pattern ^sig_[0-9A-HJKMNP-TV-Z]{26}$
entity_idstringyesThe entity the signal is attributed to (never rewritten by a merge).
  • pattern ^ent_[0-9A-HJKMNP-TV-Z]{26}$
canonical_entity_idstringyesThe entity it counted under: entity_id, or the entity it is merged into.
  • pattern ^ent_[0-9A-HJKMNP-TV-Z]{26}$
typeenumyes
  • one of "recommendation", "recommendation_tally", "rating", "rating_aggregate"
source_keystringyesOpenVibe.Sources source key.
  • pattern ^[a-z0-9][a-z0-9-]{1,63}$
source_item_idstringyes
  • pattern ^itm_[0-9A-HJKMNP-TV-Z]{26}$
item_revisionintegeryesThe Sources item revision the signal was read from.
  • minimum 1
observed_atstringyesWhen Sources retrieved that item revision (provenance.retrieved_at).
  • format date-time
source_published_atstring | nullyesThe item's published_at as Sources gave it; null when it gave none.
canonical_urlstring | nullyesThe item's canonical URL as Sources gave it; null when it has none.
license_notestring | nullyesLicence note recorded for the item in Sources; null when none.
recommendedbooleanrecommendation only: whether the reviewer recommends it.
positive_countintegerrecommendation_tally only: positive reviews the source counts.
  • minimum 0
total_countintegerrecommendation_tally only: all reviews the source counts (≥ positive_count).
  • minimum 0
rating_valuenumberrating and rating_aggregate only: the value as stated.
rating_bestnumber | nullrating and rating_aggregate only: top of the stated scale; null when the source states none.
rating_worstnumber | nullrating and rating_aggregate only: bottom of the stated scale; null when the source states none.
rating_countintegerrating and rating_aggregate only: ratings behind the value (1 for a single review).
  • minimum 1
statusenumyessuperseded: replaced by a newer revision of the same item; withdrawn: every other removal.
  • one of "superseded", "withdrawn"
reasonstringyesWhy, in plain words (e.g. "removed by its source: <reason>", "source item revised (r1 → r2)").
  • maxLength 500
replaced_bystringstatus superseded only: the signal that replaced it.
  • pattern ^sig_[0-9A-HJKMNP-TV-Z]{26}$

Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

Valid: superseded
{
  "signal_id": "sig_01M38GW2W9GCC5P6WKXXFVXBQY",
  "entity_id": "ent_01M38GW2QD088TQ08VN985JTXT",
  "canonical_entity_id": "ent_01M38GW2QD088TQ08VN985JTXT",
  "type": "recommendation",
  "source_key": "steam-reviews-portal-2",
  "source_item_id": "itm_01M2ZB00F8E73MN708E0S8WFM0",
  "item_revision": 1,
  "observed_at": "2026-09-20T12:00:01.000Z",
  "source_published_at": "2026-09-01T00:00:00.000Z",
  "canonical_url": null,
  "license_note": null,
  "recommended": true,
  "status": "superseded",
  "reason": "source item revised (r1 → r2)",
  "replaced_by": "sig_01M38GW33Q3WGNNV0RVRERXSA3"
}
Valid: withdrawn-by-source
{
  "signal_id": "sig_01M38GW33AG2JGY97E8YACRG2G",
  "entity_id": "ent_01M38GW32MMJWAVC9KPYXC759Y",
  "canonical_entity_id": "ent_01M38GW32MMJWAVC9KPYXC759Y",
  "type": "rating_aggregate",
  "source_key": "shop-example",
  "source_item_id": "itm_01M2ZB05BG9JCWV5MRXRD4ZTBG",
  "item_revision": 1,
  "observed_at": "2026-09-20T12:00:06.000Z",
  "source_published_at": null,
  "canonical_url": "https://shop.example/p/widget",
  "license_note": "Product data as published by shop.example",
  "rating_value": 4.2,
  "rating_best": 5,
  "rating_worst": null,
  "rating_count": 120,
  "status": "withdrawn",
  "reason": "removed by its source: takedown"
}
Rejected: deleted-status
{
  "signal_id": "sig_01M38GW30H8EXZTMFC3DWMR8RR",
  "entity_id": "ent_01M38GW2QD088TQ08VN985JTXT",
  "canonical_entity_id": "ent_01M38GW2QD088TQ08VN985JTXT",
  "type": "recommendation",
  "source_key": "steam-reviews-portal-2",
  "source_item_id": "itm_01M2ZB03D0JFTD8H9CZE26KNHR",
  "item_revision": 1,
  "observed_at": "2026-09-20T12:00:04.000Z",
  "source_published_at": null,
  "canonical_url": null,
  "license_note": null,
  "recommended": false,
  "status": "deleted",
  "reason": "removed by its source: author deleted the review"
}
Rejected: missing-status
{
  "signal_id": "sig_01M38GW30H8EXZTMFC3DWMR8RR",
  "entity_id": "ent_01M38GW2QD088TQ08VN985JTXT",
  "canonical_entity_id": "ent_01M38GW2QD088TQ08VN985JTXT",
  "type": "recommendation",
  "source_key": "steam-reviews-portal-2",
  "source_item_id": "itm_01M2ZB03D0JFTD8H9CZE26KNHR",
  "item_revision": 1,
  "observed_at": "2026-09-20T12:00:04.000Z",
  "source_published_at": null,
  "canonical_url": null,
  "license_note": null,
  "recommended": false,
  "reason": "removed by its source: author deleted the review"
}
Rejected: superseded-without-replacement
{
  "signal_id": "sig_01M38GW2W9GCC5P6WKXXFVXBQY",
  "entity_id": "ent_01M38GW2QD088TQ08VN985JTXT",
  "canonical_entity_id": "ent_01M38GW2QD088TQ08VN985JTXT",
  "type": "recommendation",
  "source_key": "steam-reviews-portal-2",
  "source_item_id": "itm_01M2ZB00F8E73MN708E0S8WFM0",
  "item_revision": 1,
  "observed_at": "2026-09-20T12:00:01.000Z",
  "source_published_at": null,
  "canonical_url": null,
  "license_note": null,
  "recommended": true,
  "status": "superseded",
  "reason": "source item revised (r1 → r2)"
}
Rejected: tally-without-counts
{
  "signal_id": "sig_01M38GW31D8P3PQ89VKPPRBT9T",
  "entity_id": "ent_01M38GW2QD088TQ08VN985JTXT",
  "canonical_entity_id": "ent_01M38GW2QD088TQ08VN985JTXT",
  "type": "recommendation_tally",
  "source_key": "steam-reviews-portal-2",
  "source_item_id": "itm_01M2ZB04C8N9TB7GZ9266TR9EY",
  "item_revision": 1,
  "observed_at": "2026-09-20T12:00:05.000Z",
  "source_published_at": null,
  "canonical_url": null,
  "license_note": null,
  "status": "withdrawn",
  "reason": "the source no longer states a signal (no value)"
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('reviews.signal.removed@1', value);   // { valid, errors: [{ path, message }] }