NewsClusterReadResult news.cluster-read-result@1

Generated at from openvibe-contracts v0.53.0 and openvibe-sdk v0.11.0.

Version
1.0.0
Owner
news
Visibility
first-party
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/news/cluster-read-result.v1.json

news.cluster-read-result@1: answers of news.cluster.read on OpenVibe.News (editors, or a service holding news.cluster.read). GET /api/v1/clusters?limit= → { clusters } (open clusters, newest activity first). GET /api/v1/clusters/:id → { cluster } with its items, audit and stories (404 cluster.not_found). GET /api/v1/source-items/:id (nsi_… or itm_…) → { item } (404 source_item.not_found). GET /api/v1/ingest → { cursor, runs, sources }: the Sources cursor, the 50 latest ingestion runs and the cached source health.

Fields

This schema has no named fields.

Examples

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

Valid: ingest
{
  "cursor": 4182,
  "runs": [
    {
      "id": 91,
      "origin": "pull",
      "state": "ok",
      "source_key": null,
      "sources_item_id": null,
      "error_code": null,
      "detail": null,
      "counts": {
        "created": 3,
        "updated": 1,
        "removed": 0,
        "duplicates": 1,
        "unchanged": 12
      },
      "cursor_before": 4170,
      "cursor_after": 4182,
      "at": "2026-09-24T09:40:12.000Z"
    }
  ],
  "sources": [
    {
      "source_key": "harbour-gazette",
      "name": "Harbour Gazette",
      "homepage_url": "https://harbourgazette.example",
      "status": "active",
      "stale": false,
      "last_success_at": "2026-09-24T08:15:00.000Z",
      "refreshed_at": "2026-09-24T09:40:12.000Z"
    }
  ]
}
Valid: item
{
  "item": {
    "id": "nsi_01JAB2Z7Y6X5W4V3T2S1R0QPNM",
    "sources_item": {
      "service": "sources",
      "type": "item",
      "id": "itm_01JAB2Y8K9M1N2P3Q4R5S6T7VW",
      "revision": 1
    },
    "source_key": "harbour-gazette",
    "headline": "Harbour bridge closes for inspection after cracks found",
    "url": "https://harbourgazette.example/bridge-closure",
    "outlet": "Harbour Gazette",
    "authors": [
      "M. Okafor"
    ],
    "published_at": "2026-09-24T07:30:00+01:00",
    "summary": null,
    "summary_basis": "terms do not allow a stored summary",
    "license_note": null,
    "terms_note": "Headline and link only",
    "status": "active",
    "duplicate_of": null,
    "dedupe": null,
    "cluster_id": "clu_01JAB2X3C4D5E6F7G8H9J0KMNP",
    "cluster_reason": {
      "rule": "new_cluster",
      "cluster": "clu_01JAB2X3C4D5E6F7G8H9J0KMNP",
      "terms": [
        "bridge",
        "harbour",
        "inspection"
      ],
      "entities": [
        "Harbour Bridge"
      ]
    },
    "retrieved_at": "2026-09-24T08:15:00.000Z",
    "first_seen_at": "2026-09-24T08:15:00.000Z",
    "upstream_updated_at": null,
    "removed": null
  }
}
Valid: list
{
  "clusters": [
    {
      "id": "clu_01JAB2X3C4D5E6F7G8H9J0KMNP",
      "label": "Harbour Bridge",
      "status": "open",
      "merged_into": null,
      "split_from": null,
      "window": {
        "start": "2026-09-24T06:30:00.000Z",
        "end": "2026-09-24T07:30:00.000Z"
      },
      "created_by": "svc:news",
      "key_terms": [
        {
          "term": "bridge",
          "items": 2
        },
        {
          "term": "inspection",
          "items": 2
        }
      ],
      "key_entities": [
        {
          "entity": "Harbour Bridge",
          "items": 2
        }
      ],
      "item_count": 2
    }
  ]
}
Valid: one
{
  "cluster": {
    "id": "clu_01JAB2X3C4D5E6F7G8H9J0KMNP",
    "label": "Harbour Bridge",
    "status": "open",
    "merged_into": null,
    "split_from": null,
    "window": {
      "start": "2026-09-24T06:30:00.000Z",
      "end": "2026-09-24T07:30:00.000Z"
    },
    "created_by": "svc:news",
    "key_terms": [
      {
        "term": "bridge",
        "items": 2
      },
      {
        "term": "inspection",
        "items": 2
      }
    ],
    "key_entities": [
      {
        "entity": "Harbour Bridge",
        "items": 2
      }
    ],
    "item_count": 2,
    "items": [
      {
        "id": "nsi_01JAB2Z7Y6X5W4V3T2S1R0QPNM",
        "sources_item": {
          "service": "sources",
          "type": "item",
          "id": "itm_01JAB2Y8K9M1N2P3Q4R5S6T7VW",
          "revision": 1
        },
        "source_key": "harbour-gazette",
        "headline": "Harbour bridge closes for inspection after cracks found",
        "url": "https://harbourgazette.example/bridge-closure",
        "outlet": "Harbour Gazette",
        "authors": [
          "M. Okafor"
        ],
        "published_at": "2026-09-24T07:30:00+01:00",
        "summary": null,
        "summary_basis": "terms do not allow a stored summary",
        "license_note": null,
        "terms_note": "Headline and link only",
        "status": "active",
        "duplicate_of": null,
        "dedupe": null,
        "cluster_id": "clu_01JAB2X3C4D5E6F7G8H9J0KMNP",
        "cluster_reason": {
          "rule": "new_cluster",
          "cluster": "clu_01JAB2X3C4D5E6F7G8H9J0KMNP",
          "terms": [
            "bridge",
            "harbour",
            "inspection"
          ],
          "entities": [
            "Harbour Bridge"
          ]
        },
        "retrieved_at": "2026-09-24T08:15:00.000Z",
        "first_seen_at": "2026-09-24T08:15:00.000Z",
        "upstream_updated_at": null,
        "removed": null
      },
      {
        "id": "nsi_01JAB2Z8Y6X5W4V3T2S1R0QPNM",
        "sources_item": {
          "service": "sources",
          "type": "item",
          "id": "itm_01JAB2Y9K9M1N2P3Q4R5S6T7VW",
          "revision": 1
        },
        "source_key": "coastal-wire",
        "headline": "Bridge inspection to take two weeks, council says",
        "url": "https://coastalwire.example/news/bridge-inspection",
        "outlet": "Coastal Wire",
        "authors": [
          "M. Okafor"
        ],
        "published_at": "2026-09-24T07:30:00+01:00",
        "summary": null,
        "summary_basis": "terms do not allow a stored summary",
        "license_note": null,
        "terms_note": "Headline and link only",
        "status": "active",
        "duplicate_of": null,
        "dedupe": null,
        "cluster_id": "clu_01JAB2X3C4D5E6F7G8H9J0KMNP",
        "cluster_reason": {
          "rule": "shared_terms",
          "cluster": "clu_01JAB2X3C4D5E6F7G8H9J0KMNP",
          "shared_entities": [
            "Harbour Bridge"
          ],
          "shared_terms": [
            "bridge",
            "inspection"
          ],
          "score": 4,
          "window_hours": 72
        },
        "retrieved_at": "2026-09-24T08:15:00.000Z",
        "first_seen_at": "2026-09-24T08:15:00.000Z",
        "upstream_updated_at": null,
        "removed": null
      }
    ],
    "audit": [
      {
        "id": "cla_01JAB4A5B6C7D8E9F0G1H2J3KM",
        "action": "merge",
        "cluster_id": "clu_01JAB2X3C4D5E6F7G8H9J0KMNP",
        "other_id": "clu_01JAB2X4C4D5E6F7G8H9J0KMNP",
        "item_ids": [
          "nsi_01JAB2Z8Y6X5W4V3T2S1R0QPNM"
        ],
        "reason": "Same bridge closure",
        "actor": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
        "reverses": null,
        "reversed_by": null,
        "at": "2026-09-24T09:40:12.000Z"
      }
    ],
    "stories": [
      {
        "id": "sty_01JAB3DEF4GH5JK6MN7PQ8RS9T",
        "slug": "harbour-bridge-closes-for-inspection",
        "state": "draft"
      }
    ]
  }
}
Rejected: bad-run-origin
{
  "cursor": 4182,
  "runs": [
    {
      "id": 91,
      "origin": "cron",
      "state": "ok",
      "at": "2026-09-24T09:40:12.000Z"
    }
  ],
  "sources": []
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('news.cluster-read-result@1', value);   // { valid, errors: [{ path, message }] }