BlogChangelogEntry blog.changelog-entry@2

Generated at from openvibe-contracts v0.419.0 and openvibe-sdk v0.161.0.

Version
2.0.0
Owner
blog
Visibility
public
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/blog/changelog-entry.v2.json

blog.changelog-entry@2: one shipped commit as OpenVibe.Blog's network changelog shows it (GET /api/v1/changelog, server/changelog.js). Every entry names what changed in plain words (plain, without its PR number or stage tag) and is tagged with a kind and up to three areas from Blog's fixed list; housekeeping (library pins, merges, test-only and docs-only changes) is kind internal and needs no model. The commit id, its GitHub URL and the pull request that shipped it stay available for the fold under the row.

Fields

FieldTypeRequiredDescriptionConstraints
servicestringyesThe site's registry id (live, chat, blog, …).
  • pattern ^[a-z][a-z0-9-]{0,39}$
repostringyesThe GitHub repository the commit shipped from, owner/name.
  • pattern ^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$
shastringyes
  • pattern ^[0-9a-f]{7,40}$
shortstringyesThe first seven characters of sha.
  • pattern ^[0-9a-f]{7}$
subjectstringyesThe commit message's first line, as written.
  • minLength 1
  • maxLength 240
plainstringyesThe subject in plain words: the PR number and stage tag removed, no other claim added.
  • minLength 1
  • maxLength 240
kindenumyesnew: something a person can now do; better: an existing thing improved; fixed: a defect repaired; internal: housekeeping with nothing for a person to notice.
  • one of "new", "better", "fixed", "internal"
areasarray of enumyesOne to three of Blog's fixed areas; empty only for kind internal.
  • maxItems 3
  • unique items
  • items: one of "phone", "chat", "go-live", "video", "menu", "accessibility", "speed", "sign-in", "wallet", "ai", "search", "files", "pictures", "games", "design", "developer", "machines", "money", "privacy", "moderation", "notifications", "feed", "wiki", "blog", "community", "meme", "shop", "tools", "exchange", "git"
authorstring | null
  • maxLength 80
committed_atstring | null
  • format date-time
deployed_atstringyesWhen the release carrying the commit was seen deployed.
  • format date-time
majorbooleanTrue when the release was large or named as major; the hints a patch notes post highlights.
urlstringyesThe commit on GitHub.
  • pattern ^https://github.com/
  • maxLength 2000
post_idstring | nullThe patch notes post that carried it; null while pending and for imported history.
  • pattern ^pst_[0-9A-HJKMNP-TV-Z]{26}$
printeger | nullThe pull request the subject names, when it names one.
  • minimum 1
pr_urlstring | null
  • pattern ^https://github.com/
  • maxLength 2000

Examples

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

Valid: chat-scroll-fix
{
  "service": "chat",
  "repo": "OpenVibers/OpenVibe.Chat",
  "sha": "3d2c1b0a9f8e7d6c5b4a39281706f5e4d3c2b1a0",
  "short": "3d2c1b0",
  "subject": "Fix scroll jump when a message arrives while reading history (#361)",
  "plain": "Fix the chat jumping to the bottom when a message arrives while you read history",
  "kind": "fixed",
  "areas": [
    "chat",
    "accessibility"
  ],
  "author": "OpenVibers",
  "committed_at": "2026-11-08T09:15:00.000Z",
  "deployed_at": "2026-11-08T11:00:00.000Z",
  "major": false,
  "url": "https://github.com/OpenVibers/OpenVibe.Chat/commit/3d2c1b0a9f8e7d6c5b4a39281706f5e4d3c2b1a0",
  "post_id": null,
  "pr": 361,
  "pr_url": "https://github.com/OpenVibers/OpenVibe.Chat/pull/361"
}
Valid: devblog-card
{
  "service": "live",
  "repo": "OpenVibers/OpenVibe.Live",
  "sha": "7b941a0c1d2e3f405162738495a6b7c8d9e0f112",
  "short": "7b941a0",
  "subject": "Recent Changes card: show the newest devblog with its art (#714)",
  "plain": "The Recent Changes card now shows the newest devblog post with its art",
  "kind": "new",
  "areas": [
    "menu",
    "feed"
  ],
  "author": "OpenVibers",
  "committed_at": "2026-11-09T18:40:12.000Z",
  "deployed_at": "2026-11-09T19:07:00.000Z",
  "major": false,
  "url": "https://github.com/OpenVibers/OpenVibe.Live/commit/7b941a0c1d2e3f405162738495a6b7c8d9e0f112",
  "post_id": "pst_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "pr": 714,
  "pr_url": "https://github.com/OpenVibers/OpenVibe.Live/pull/714"
}
Valid: housekeeping
{
  "service": "network",
  "repo": "OpenVibers/OpenVibe.Network",
  "sha": "9c4f2a10b3d5e7f90123456789abcdef01234567",
  "short": "9c4f2a1",
  "subject": "openvibe-shared v4.175.0 (was v4.173.0) (#401)",
  "plain": "Pin openvibe-shared 4.175.0 (was 4.173.0)",
  "kind": "internal",
  "areas": [],
  "author": null,
  "committed_at": null,
  "deployed_at": "2026-11-09T19:07:00.000Z",
  "major": false,
  "url": "https://github.com/OpenVibers/OpenVibe.Network/commit/9c4f2a10b3d5e7f90123456789abcdef01234567",
  "post_id": null,
  "pr": null,
  "pr_url": null
}
Rejected: bad-kind
{
  "service": "live",
  "repo": "OpenVibers/OpenVibe.Live",
  "sha": "7b941a0c1d2e3f405162738495a6b7c8d9e0f112",
  "short": "7b941a0",
  "subject": "Recent Changes card: show the newest devblog with its art (#714)",
  "plain": "The Recent Changes card now shows the newest devblog post with its art",
  "kind": "improvement",
  "areas": [
    "menu",
    "feed"
  ],
  "author": "OpenVibers",
  "committed_at": "2026-11-09T18:40:12.000Z",
  "deployed_at": "2026-11-09T19:07:00.000Z",
  "major": false,
  "url": "https://github.com/OpenVibers/OpenVibe.Live/commit/7b941a0c1d2e3f405162738495a6b7c8d9e0f112",
  "post_id": "pst_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "pr": 714,
  "pr_url": "https://github.com/OpenVibers/OpenVibe.Live/pull/714"
}
Rejected: missing-plain
{
  "service": "live",
  "repo": "OpenVibers/OpenVibe.Live",
  "sha": "7b941a0c1d2e3f405162738495a6b7c8d9e0f112",
  "short": "7b941a0",
  "subject": "Recent Changes card: show the newest devblog with its art (#714)",
  "kind": "new",
  "areas": [
    "menu",
    "feed"
  ],
  "author": "OpenVibers",
  "committed_at": "2026-11-09T18:40:12.000Z",
  "deployed_at": "2026-11-09T19:07:00.000Z",
  "major": false,
  "url": "https://github.com/OpenVibers/OpenVibe.Live/commit/7b941a0c1d2e3f405162738495a6b7c8d9e0f112",
  "post_id": "pst_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "pr": 714,
  "pr_url": "https://github.com/OpenVibers/OpenVibe.Live/pull/714"
}
Rejected: new-without-area
{
  "service": "live",
  "repo": "OpenVibers/OpenVibe.Live",
  "sha": "7b941a0c1d2e3f405162738495a6b7c8d9e0f112",
  "short": "7b941a0",
  "subject": "Recent Changes card: show the newest devblog with its art (#714)",
  "plain": "The Recent Changes card now shows the newest devblog post with its art",
  "kind": "new",
  "areas": [],
  "author": "OpenVibers",
  "committed_at": "2026-11-09T18:40:12.000Z",
  "deployed_at": "2026-11-09T19:07:00.000Z",
  "major": false,
  "url": "https://github.com/OpenVibers/OpenVibe.Live/commit/7b941a0c1d2e3f405162738495a6b7c8d9e0f112",
  "post_id": "pst_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "pr": 714,
  "pr_url": "https://github.com/OpenVibers/OpenVibe.Live/pull/714"
}
Rejected: plain-with-pr
{
  "service": "live",
  "repo": "OpenVibers/OpenVibe.Live",
  "sha": "7b941a0c1d2e3f405162738495a6b7c8d9e0f112",
  "short": "7b941a0",
  "subject": "Recent Changes card: show the newest devblog with its art (#714)",
  "plain": "Show the newest devblog (#714)",
  "kind": "new",
  "areas": [
    "menu",
    "feed"
  ],
  "author": "OpenVibers",
  "committed_at": "2026-11-09T18:40:12.000Z",
  "deployed_at": "2026-11-09T19:07:00.000Z",
  "major": false,
  "url": "https://github.com/OpenVibers/OpenVibe.Live/commit/7b941a0c1d2e3f405162738495a6b7c8d9e0f112",
  "post_id": "pst_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "pr": 714,
  "pr_url": "https://github.com/OpenVibers/OpenVibe.Live/pull/714"
}
Rejected: too-many-areas
{
  "service": "live",
  "repo": "OpenVibers/OpenVibe.Live",
  "sha": "7b941a0c1d2e3f405162738495a6b7c8d9e0f112",
  "short": "7b941a0",
  "subject": "Recent Changes card: show the newest devblog with its art (#714)",
  "plain": "The Recent Changes card now shows the newest devblog post with its art",
  "kind": "new",
  "areas": [
    "menu",
    "feed",
    "video",
    "chat"
  ],
  "author": "OpenVibers",
  "committed_at": "2026-11-09T18:40:12.000Z",
  "deployed_at": "2026-11-09T19:07:00.000Z",
  "major": false,
  "url": "https://github.com/OpenVibers/OpenVibe.Live/commit/7b941a0c1d2e3f405162738495a6b7c8d9e0f112",
  "post_id": "pst_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "pr": 714,
  "pr_url": "https://github.com/OpenVibers/OpenVibe.Live/pull/714"
}
Rejected: unknown-area
{
  "service": "live",
  "repo": "OpenVibers/OpenVibe.Live",
  "sha": "7b941a0c1d2e3f405162738495a6b7c8d9e0f112",
  "short": "7b941a0",
  "subject": "Recent Changes card: show the newest devblog with its art (#714)",
  "plain": "The Recent Changes card now shows the newest devblog post with its art",
  "kind": "new",
  "areas": [
    "podcast"
  ],
  "author": "OpenVibers",
  "committed_at": "2026-11-09T18:40:12.000Z",
  "deployed_at": "2026-11-09T19:07:00.000Z",
  "major": false,
  "url": "https://github.com/OpenVibers/OpenVibe.Live/commit/7b941a0c1d2e3f405162738495a6b7c8d9e0f112",
  "post_id": "pst_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "pr": 714,
  "pr_url": "https://github.com/OpenVibers/OpenVibe.Live/pull/714"
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('blog.changelog-entry@2', value);   // { valid, errors: [{ path, message }] }