---
title: "wiki.article-draft-result@1 · OpenVibe.Services"
canonical: "https://openvibe.services/docs/contracts/wiki.article-draft-result"
updated: null
---

# wiki.article-draft-result@1 · OpenVibe.Services

HTML: [wiki.article-draft-result@1 · OpenVibe.Services](https://openvibe.services/docs/contracts/wiki.article-draft-result)

# WikiArticleDraftResult `wiki.article-draft-result@1`

Generated at 2026-11-13 06:25:48 UTC from [`openvibe-contracts v0.419.0`](https://github.com/OpenVibers/OpenVibe.Contracts/tree/v0.419.0) and [`openvibe-sdk v0.161.0`](https://github.com/OpenVibers/OpenVibe.SDK/tree/v0.161.0).

- Version: 1.0.0
- Owner: wiki
- Visibility: first-party
- Status: active
- Compatibility: backward
- Schema: [`https://openvibe.network/contracts/wiki/article-draft-result.v1.json`](/docs/contracts/wiki.article-draft-result.json)

wiki.article-draft-result@1: what the wiki writer answers. The draft revision is pending review — status is always 'pending' — with the workflow and run that wrote it, the model that answered, and the sources its sentences cited. Nothing here is published.

## Fields

| Field | Type | Required | Description | Constraints |
| --- | --- | --- | --- | --- |
| `proposal` | object | yes |  |  |
| `proposal.id` | string | yes |  |  |
| `proposal.page_id` | string | yes |  |  |
| `proposal.space_id` | string |  |  |  |
| `proposal.revision` | integer |  |  | - `minimum 1` |
| `proposal.base_revision` | integer |  |  | - `minimum 0` |
| `proposal.workflow_id` | string |  |  |  |
| `proposal.run_id` | string |  |  |  |
| `proposal.status` | const | yes |  | - `= "pending"` |
| `proposal.proposed_by` | string |  |  |  |
| `revision` | [wiki.revision](/docs/contracts/wiki.revision) | yes |  |  |
| `run_id` | string \| null |  |  | - `maxLength 200` |
| `model` | string \| null |  |  | - `maxLength 200` |
| `provider` | string \| null |  |  | - `maxLength 200` |
| `sources` | array of object |  |  | - `maxItems 50` |
| `sources[].url` | string | yes |  | - `maxLength 2048` |
| `sources[].title` | string \| null |  |  | - `maxLength 500` |
| `sources[].author` | string \| null |  |  | - `maxLength 200` |
| `sources[].retrieved_at` | string \| null |  |  | - `maxLength 40` |
| `sources[].license` | string \| null |  |  | - `maxLength 200` |

## Examples

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

 Valid: pending

~~~~
{
  "proposal": {
    "id": "prp_01JAB2C3D4E5F6G7H8J9K0MNPQ",
    "page_id": "pg_01JAB2C3D4E5F6G7H8J9K0MNPQ",
    "space_id": "spc_01JAB2C3D4E5F6G7H8J9K0MNPQ",
    "revision": 4,
    "base_revision": 3,
    "workflow_id": "content.wiki",
    "run_id": "run_01JAB2C3D4E5F6G7H8J9K0MNPS",
    "status": "pending",
    "proposed_by": "svc:wiki"
  },
  "revision": {
    "number": 4,
    "id": "rev_01JAB2C3D4E5F6G7H8J9K0MNPR",
    "kind": "edit",
    "parent_number": 3,
    "title": "Restreaming",
    "summary": "Sending one stream to several platforms, with its sources.",
    "infobox": [],
    "body": "Restreaming sends one encoder feed to several platforms. It keeps the chat in one place.",
    "authorship": {
      "mode": "ai",
      "workflow": {
        "id": "content.wiki",
        "runId": "run_01JAB2C3D4E5F6G7H8J9K0MNPS"
      }
    },
    "author": "svc:wiki",
    "message": "AI proposal",
    "created_at": "2026-11-09T10:00:00.000Z"
  },
  "run_id": "run_01JAB2C3D4E5F6G7H8J9K0MNPS",
  "model": "openvibe/auto",
  "provider": "openvibe",
  "sources": [
    {
      "url": "https://docs.example.com/rtmp",
      "title": "RTMP spec",
      "author": null,
      "retrieved_at": "2026-11-09T09:00:00.000Z",
      "license": null
    }
  ]
}
~~~~

Rejected: published

~~~~
{
  "proposal": {
    "id": "prp_1",
    "page_id": "pg_1",
    "status": "published"
  },
  "revision": {
    "number": 1,
    "id": "rev_1",
    "kind": "edit",
    "title": "X",
    "author": "svc:wiki",
    "created_at": "2026-11-09T10:00:00.000Z"
  }
}
~~~~

## Validate

~~~~
const contracts = require('openvibe-contracts');
contracts.validate('wiki.article-draft-result@1', value);   // { valid, errors: [{ path, message }] }
~~~~
