openvibers/openvibe.publishing Commits

Bump release metadata to 1.3.0 and fix the AI summary migration notes

OP OpenVibers committed 4 Oct 2026 · 51bd5ba6f8 · 4 files, +31 −29

Requested by finish-f1. Handed to the local harness by the cloud job pr-OpenVibe.Publishing-6; done by Claude opus.

Changes

ddiff --git a/README.md b/README.md
iindex f86c72a..8ad1f3a 100644
---- a/README.md
++++ b/README.md
@@@ -3,13 +3,14 @@
> Shared publishing packages for the OpenVibe publication products: Wiki, Blog, News, Reviews,
> Deals, Coupons and Trade.
--**Status:** alpha, **1.2.0**: the stores run on PostgreSQL through the `openvibe-sdk/db` async data
++**Status:** alpha, **1.3.0**: the stores run on PostgreSQL through the `openvibe-sdk/db` async data
layer (ADR-035: PostgreSQL 18 behind PgBouncer in production, PGlite in tests). Every store method is
async, takes the product's `openvibe-sdk/db` handle, and accepts the caller's transaction handle; each
store gives its DDL as `schema(prefix)` for the product's migrations. v1.1.0 adds the shared ingest
chassis (`openvibe-publishing/ingest`) and publication glue (`openvibe-publishing/publication`) —
additive, no existing export changed. v1.2.0 adds `openvibe-publishing/layout`, the page document the
--seven sites render through `openvibe-shared/shell` (additive). The exit proof (`examples/two-products`) runs in `npm test`.
++seven sites render through `openvibe-shared/shell` (additive). v1.3.0 forwards the AI summary, facts,
++`updated` and `url` through `layout.renderDocument` to the shell (additive). The exit proof (`examples/two-products`) runs in `npm test`.
Releases v0.1.0 to v1.0.0 are tagged (see [CHANGELOG.md](CHANGELOG.md)). All seven products (Wiki and
Blog, public at openvibe.wiki and openvibe.blog; News, Reviews, Deals, Coupons and Trade, deployed
loopback-only, not launched) run v1.0.0 on PostgreSQL today; the five content products move to v1.1.0 as
@@@ -76,7 +77,7 @@ Every module is its own entry point and can be used alone.
Pin the release tarball, like every OpenVibe package (never a `file:` link or a vendored copy):
```json
--"openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v1.2.0",
++"openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v1.3.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.15.0",
"pg": "^8.23.0"
```
ddiff --git a/STATUS.json b/STATUS.json
iindex d6797a0..f5a6163 100644
---- a/STATUS.json
++++ b/STATUS.json
@@@ -5,7 +5,7 @@
"wave": "W15",
"kind": "packages",
"package": "openvibe-publishing",
-- "version": "1.2.0",
++ "version": "1.3.0",
"plan": "OpenVibe End-to-End Realignment & Implementation Plan, revision 3 (20 Sep 2026)",
"runtime": null,
"port": null,
@@@ -44,7 +44,7 @@
"openvibe-shared >=1.5.0 (optional peer; tests pin v2.6.0; layout needs >=2.6.0)",
"PostgreSQL 18 through PgBouncer (the product's database)"
],
-- "tests": "npm test (Node 22): 19 files, 140 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",
++ "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",
@@@ -63,7 +63,7 @@
"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"
++ "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-10-04"
}
ddiff --git a/docs/MIGRATION.md b/docs/MIGRATION.md
iindex 07c31ec..2094428 100644
---- a/docs/MIGRATION.md
++++ b/docs/MIGRATION.md
@@@ -53,27 +53,6 @@ The five content products (News, Reviews, Deals, Coupons, Trade) each delete the
- **Test:** the product's own suite (`ov test`), including its ingest and publication tests; the
Publishing side is `test/ingest.test.js` and `test/publication.test.js`.
--## v1.2.0 → v1.3.0
--
--Additive: `layout.renderDocument` forwards the AI summary to the shell. Everything else is unchanged,
--and a product that passes none of the four options renders exactly as on v1.2.0.
--
--- **package.json:** `"openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v1.3.0"`.
-- `openvibe-shared` stays at v2.6.0 or later (that is where `seo.pageSummary` and the shell's `summary`
-- support already live).
--- **Lockfile:** copy the `node_modules/openvibe-publishing` entry (`1.3.0`, the matching `resolved`,
-- the real `integrity`) from a product already on the tag.
--- **What changes in the product:** pass `summary` on the home render (and on any other page that has
-- a real one-line summary, e.g. an article or a review), so the `ai-summary` meta lands on the page.
-- - `layout.renderDocument({ …, summary, facts, updated, url })` — `summary` is the one-line AI
-- summary, `facts` the `[[key, value], string]` (or `[string]`) rows, `updated` the ISO date, `url`
-- absolute and defaulting to the canonical.
-- - `summary` alone gives `<meta name="ai-summary">` plus a `WebPage` JSON-LD tag; `facts` gives the
-- `<noscript><section data-ai-summary>` block; `updated` becomes `dateModified`.
-- - **Only pass what the facts support.** A missing rating, price, date or author is left out of the
-- facts block, never defaulted — the same rule as every other structured output here.
--- **Test:** the product's page/render tests (`ov test`); Publishing's side is `test/layout.test.js`.
--
## v1.1.0 → v1.2.0
Adds `openvibe-publishing/layout`; nothing existing changes. The seven publication sites each hand-wrote
@@@ -102,3 +81,25 @@ the page document; `renderDocument` replaces that, composed over `openvibe-share
- **Worked example:** OpenVibe.News main, `server/render/layout.js` (`renderPage` builds `nav`,
`footer`, `account` and returns `layout.renderDocument({ site: 'news', … })`), landed in News PR #6.
- **Test:** the product's page/render tests (`ov test`); Publishing's side is `test/layout.test.js`.
++
++## v1.2.0 → v1.3.0
++
++Additive: `layout.renderDocument` forwards the AI summary to the shell. Everything else is unchanged,
++and a product that passes none of the four options renders exactly as on v1.2.0.
++
++- **package.json:** `"openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v1.3.0"`.
++ `openvibe-shared` stays at v2.6.0 or later (that is where `seo.pageSummary` and the shell's `summary`
++ support already live).
++- **Lockfile:** copy the `node_modules/openvibe-publishing` entry (`1.3.0`, the matching `resolved`,
++ the real `integrity`) from a product already on the tag.
++- **What changes in the product:** pass `summary` on the home render (and on any other page that has
++ a real one-line summary, e.g. an article or a review), so the `ai-summary` meta lands on the page.
++ - `layout.renderDocument({ …, summary, facts, updated, url })` — `summary` is the one-line AI
++ summary, `facts` the `[[key, value], string]` (or `[string]`) rows, `updated` the ISO date, `url`
++ absolute and defaulting to the canonical.
++ - `summary` alone gives `<meta name="ai-summary">` plus a `WebPage` JSON-LD tag; with `summary`,
++ `facts` adds the `<noscript><section data-ai-summary>` block and `updated` becomes `dateModified`.
++ Without a `summary`, `facts`, `updated` and `url` emit nothing.
++ - **Only pass what the facts support.** A missing rating, price, date or author is left out of the
++ facts block, never defaulted — the same rule as every other structured output here.
++- **Test:** the product's page/render tests (`ov test`); Publishing's side is `test/layout.test.js`.
ddiff --git a/package-lock.json b/package-lock.json
iindex 9c28273..e074ba2 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -1,12 +1,12 @@
{
"name": "openvibe-publishing",
-- "version": "1.2.0",
++ "version": "1.3.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "openvibe-publishing",
-- "version": "1.2.0",
++ "version": "1.3.0",
"license": "MIT",
"devDependencies": {
"@electric-sql/pglite": "^0.5.8",