{ "repository": "OpenVibers/OpenVibe.Publishing", "stage": "alpha", "code": true, "wave": "W15", "kind": "packages", "package": "openvibe-publishing", "version": "1.7.1", "plan": "OpenVibe End-to-End Realignment & Implementation Plan, revision 3 (20 Sep 2026)", "runtime": null, "port": null, "domain": null, "database": "none of its own: the stores use tables in each product's PostgreSQL database through the product's openvibe-sdk/db handle (ADR-035); DDL from schema(prefix) in the product's migrations", "modules": [ "revisions", "schedule", "taxonomy", "citations", "media", "discussion", "seo", "authorship", "index-hooks", "ai", "ssr", "blocks", "ingest", "publication", "layout", "search-feed", "search-relay" ], "consumers": [ "OpenVibe.Wiki (https://openvibe.wiki): revisions, schedule, taxonomy, citations, media, discussion, seo, authorship, index-hooks, ssr, layout", "OpenVibe.Blog (https://openvibe.blog): the same plus ai and ingest", "OpenVibe.News (https://openvibe.news): revisions, taxonomy, citations, discussion, seo, authorship, index-hooks, ssr, ingest, publication, layout", "OpenVibe.Reviews (https://openvibe.reviews): revisions, discussion, seo, authorship, index-hooks, ssr, ingest, publication, layout", "OpenVibe.Deals (https://openvibe.deals): discussion, seo, index-hooks, ssr, ingest, publication, layout", "OpenVibe.Coupons (https://openvibe.coupons): seo, index-hooks, ssr, ingest, publication, layout", "OpenVibe.Trade (https://openvibe.trade): revisions, seo, authorship, index-hooks, ssr, ingest, publication, layout", "OpenVibe.Help (https://openvibe.help): search-feed", "OpenVibe.Host (https://openvibe.host): search-feed, ingest, discussion", "OpenVibe.Inventory (https://inventory.openvibe.network): search-feed", "OpenVibe.Quest (https://openvibe.quest): search-feed", "OpenVibe.Rent (https://openvibe.rent): search-feed, ai", "OpenVibe.Work (https://openvibe.work): search-feed", "OpenVibe.Games (https://openvibe.games, apps/server): search-feed for creator worlds", "OpenVibe.Food (https://openvibe.food): ai" ], "consumerPins": "each consumer pins one release tag; OpenVibe.Contracts docs/ESTATE.md lists them", "plannedConsumers": [], "exitProof": "examples/two-products + test/two-products.test.js", "contracts": "openvibe-contracts v0.419.0 (devDependency): emits search.index-document@1 and events.event-envelope@1 (validated in tests)", "sdk": "openvibe-sdk v0.161.0", "shared": "openvibe-shared v4.237.0", "dependsOn": [ "openvibe-sdk >=0.15.0 (peer; tests pin v0.60.0)", "openvibe-shared >=1.5.0 (optional peer; tests pin v4.4.0; layout needs >=2.6.0)", "PostgreSQL 18 through PgBouncer (the product's database)" ], "tests": "npm test (Node 22): 19 files, 143 cases; test/postgres.test.js runs on PostgreSQL 18 + PgBouncer when OV_TEST_PG_URL is set (CI starts the containers), else it is listed as skipped", "released": true, "deployed": false, "deployment": "none: a package released as git tags; products pin the tag and deploy it with their own releases", "features": [ "async stores on PostgreSQL through openvibe-sdk/db, with the caller's transaction handle, schema(prefix) DDL for migrations, indexes for every query and bounded, keyset-paged lists", "revisions with optimistic concurrency, diff and revert", "idempotent lease-based scheduling", "taxonomy with hierarchical categories", "append-only citations", "Media attachment references with honest broken states", "Community discussion references", "deterministic indexability gate, redirects, sitemaps and feeds", "authorship and AI disclosure, held until a person's review", "OpenVibe.AI draft client", "Search index documents, tombstones and publication events", "auto-escaping SSR and a safe Markdown subset", "the ingest chassis: the OpenVibe.Sources client, a change cursor + pull loop with per-item savepoint isolation and an {applied|hold|removed} apply contract, a signed event consumer with an exactly-once inbox, the normalisers and PSL/registrable-host and freshness helpers the five content products share", "the publication glue: gate → document → sequencer.stamp → events → outbox.enqueue on the caller's transaction handle, tombstones on unpublish/merge, and the IndexNow ping", "the page document through openvibe-shared/shell page(): robots and canonical from the gate's decision, article times, prev/next, feeds, app icon, stylesheets, boost marker and the footer init, plus the AI summary (ai-summary meta, WebPage JSON-LD, facts block) when the caller passes summary/facts/updated/url" ], "updated": "2026-11-13" }