@forumone/throughline 1.0.0-next.2 → 1.0.0-pr-266-2941b02
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +81 -0
- package/README.md +4 -5
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,86 @@
|
|
|
1
1
|
# @forumone/throughline
|
|
2
2
|
|
|
3
|
+
## 1.0.0-pr-266-2941b02
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- dcf84fc: `resend`, `@react-email/components` and `@react-email/render` are optional peers rather than dependencies, and `inngest` is an optional peer. `payload` is the only required one. Each optional peer is loaded only by the subpath that uses it, and the root loads none: the approval emails import their templates when they send, so registering the suite with `throughline()` no longer loads React or React Email. A missing optional peer fails when its feature runs, with an error naming the package to install.
|
|
8
|
+
- e7d34fa: Smaller gaps closed before 1.0:
|
|
9
|
+
|
|
10
|
+
- `Integration.createFunctions` is optional. `throughline()` runs `createJobs` and never called it.
|
|
11
|
+
- `auditQuery.readAccess` now applies: it takes the tool's context, `(ctx) => boolean`, and replaces the admin/editor rule for the five audit tools. It was declared with a `PayloadRequest` and read by nothing.
|
|
12
|
+
- `job-failures` takes an `admin` sidebar group like every other Throughline collection, and gets the suite's from `throughline()`.
|
|
13
|
+
- An accessibility issue of severity `warning` reaches the publish result's `warnings` instead of being dropped.
|
|
14
|
+
- The webhook integration no longer subscribes to `form/submission.received`, which nothing sends since forms left the suite; the stored filter option stays. Stale text naming forms, the "Approvals Server" and 0.x paths is corrected.
|
|
15
|
+
|
|
16
|
+
- 673ff70: `throughline()`: one call for the whole suite (`docs/spec/1.0-throughline-call.md`). It returns `{ plugin, mcpTools, jobs }`: one Payload plugin that registers every enabled Throughline plugin in order, the tool array for `mcpPlugin`, and every job the options call for. Audit, job failures and `check_slug` are always on; every other plugin is on when its key is present. Shared values are given once: `approvals.collectionSlug` reaches the collection, the emails and the expiry job, and `collections` reaches publishing, "Your work" and scheduled publishing. Its defaults are what every site wrote by hand: scheduled publishes go through the publishing pipeline (`publishScheduledThroughPipeline`), approval links are signed with approvals' secret, and a failing healthcheck is recorded in `job-failures`. On Payload Jobs it registers its jobs itself. It refuses an integration with no `createJobs`.
|
|
17
|
+
|
|
18
|
+
**Internal now:** `getPluginRegistry`, `resolveAdminGroup`, `DEFAULT_ADMIN_GROUP`, `PluginRegistry*`, `createMcpToolCollector` and the collector's option types, `toPayloadMcpTool(s)`, `getEmailFunctions`, `getIntegrationRegistry` and `getIntegrationContext`. Use `throughline()`. `McpToolCollector` and `PayloadMcpTool` stay exported as types.
|
|
19
|
+
|
|
20
|
+
`HealthcheckOptions.onFailure` receives `{ payload }` as a second argument, and `createHealthcheckFailureHandler()` made without a `payload` records on the run's own.
|
|
21
|
+
|
|
22
|
+
- fb0b908: Jobs move in from `@forumone/throughline-workflows`, split by owner, by `docs/spec/1.0-exports.md`:
|
|
23
|
+
|
|
24
|
+
- `defineJob`, the job types, `jobPayload`, `eventSenderFor`, `failureOptions` and the two failure handlers are on `@forumone/throughline/jobs`.
|
|
25
|
+
- `inngestJobs` is on `/jobs/inngest`, beside the Inngest client; `payloadJobs` is on `/jobs/payload`.
|
|
26
|
+
- `revalidateOnPublishJob`, `publishAtScheduledTimeJob`, `executeScheduledPublishesJob` and `createTagRevalidationHooks` are on `/publishing`; `expireStaleApprovalsJob` on `/approvals`; `auditEventEchoJob` on `/audit`; `healthcheckJob` and its checks on `/integrations`.
|
|
27
|
+
- `createCacheTags` is on `/cache-tags`, which still imports nothing.
|
|
28
|
+
|
|
29
|
+
**Removed:** the six Inngest-shaped factories, `createRevalidateOnPublishFunction`, `createPublishAtScheduledTimeFunction`, `createExecuteScheduledPublishesFunction`, `createExpireStaleApprovalsFunction`, `createAuditEventEchoFunction` and `createHealthcheckFunction`. Each was `inngestJobs(inngest).toFunction(<job>(options))`; write that instead, or better, give the adapter `onFailure` and `payload` once and pass the jobs to `jobs.functions([...])`. Function ids are unchanged. `BaseWorkflowOptions` and `AuditEventEchoOptions` no longer take an `inngest`.
|
|
30
|
+
|
|
31
|
+
- cb29249: `@forumone/throughline`: the 1.0 package, starting from `@forumone/throughline-core` and `@forumone/throughline-plugin-contract`.
|
|
32
|
+
|
|
33
|
+
The root holds what is shared: environment checks, access helpers, the logger, utilities, the plugin and MCP tool types, and the MCP collector until `throughline()` wires it. Everything else is on a subpath: `/audit`, `/fields`, `/jobs`, `/jobs/inngest`, `/media` (now including reference tracking), `/observability`, `/testing`, `/client` and `/rsc`. The `throughline-payload` bin is unchanged.
|
|
34
|
+
|
|
35
|
+
Moving from 0.x, by `docs/spec/1.0-exports.md`:
|
|
36
|
+
|
|
37
|
+
- core's root no longer re-exports audit, events, references or observability; import them from `/audit`, `/jobs` and `/jobs/inngest`, `/media` and `/observability`.
|
|
38
|
+
- `/events` is now `/jobs` (the event taxonomy) and `/jobs/inngest` (the Inngest client and Vercel environment pinning). Augment `CoreEvents` on `@forumone/throughline/jobs`.
|
|
39
|
+
- `/references` is part of `/media`; `/env` and `/mcp` are part of the root; `/auth` is gone.
|
|
40
|
+
- plugin-contract's types are on the root. Its separate `McpMeta` interface is gone; the root's `McpMeta` is the one.
|
|
41
|
+
- Admin component paths are `@forumone/throughline/client#…` and `@forumone/throughline/rsc#UsedOnPanel`, so a site's `importMap.js` changes.
|
|
42
|
+
|
|
43
|
+
- 3b467f0: The last five 0.x server packages move in, by `docs/spec/1.0-exports.md`:
|
|
44
|
+
|
|
45
|
+
- `@forumone/throughline-audit` joins core's audit writer on `@forumone/throughline/audit`. `DEFAULT_AUDIT_COLLECTION_SLUG` is gone; use `DEFAULT_AUDIT_SLUG`, the same value.
|
|
46
|
+
- `@forumone/throughline-approvals` is `/approvals`. `APPROVALS_RESOLVER_SYMBOL` is internal.
|
|
47
|
+
- `@forumone/throughline-components` is `/components`.
|
|
48
|
+
- `@forumone/throughline-integrations` is `/integrations`; its `/client` (`SyncButton` and helpers) joins `@forumone/throughline/client`.
|
|
49
|
+
- `@forumone/throughline-email` and its `/templates` are `/email`. `DEFAULT_APPROVALS_COLLECTION_SLUG` is gone; use `DEFAULT_APPROVALS_SLUG` from `/approvals`, the same value. `validateOptions` is internal.
|
|
50
|
+
|
|
51
|
+
**Removed:** `createNotifyApprovalRequestFunction`, `createNotifyApprovalDecisionFunction` and `createNotifyApprovalExpiredFunction`. `emailPlugin` builds the same three Inngest functions itself, so `getEmailFunctions` and the function ids are unchanged; run `notify…Job` through an adapter to build one by hand.
|
|
52
|
+
|
|
53
|
+
Admin component paths follow: `@forumone/throughline/client#SyncButton`. Plugin ids in the registry are `@forumone/throughline/<subpath>`, with the audit query plugin at `/audit-query`.
|
|
54
|
+
|
|
55
|
+
- ea3754f: Publishing moves in from `@forumone/throughline-publishing`, by `docs/spec/1.0-exports.md`:
|
|
56
|
+
|
|
57
|
+
- `@forumone/throughline-publishing` and its `/checks` are `@forumone/throughline/publishing`.
|
|
58
|
+
- `/editorial` is `@forumone/throughline/editorial`.
|
|
59
|
+
- `/client` and `/rsc` are `@forumone/throughline/client` and `/rsc`, beside core's admin components.
|
|
60
|
+
|
|
61
|
+
Admin component paths follow, so a site's `importMap.js` changes: `@forumone/throughline/client#PublishButton`, `#UnpublishButton`, `#SchedulePublishField`, `#CommandPalette` and `#ReportsNav`, and `@forumone/throughline/rsc#ContentHealthView`, `#ContentCalendarView` and `#YourWorkDashboard`. `next` and `@payloadcms/next` are optional peers, used only by those components.
|
|
62
|
+
|
|
63
|
+
- 6c1409a: The trust boundary now covers every write that changes what the public sees. A create with `_status: 'published'` is refused (create a draft, then publish), and so is a non-draft save that changes a live document (save a draft, then publish). Before, both went live with no pipeline, approval or audit row, so "requires approval" held only for a page's first publish. Data a system derives from a live page and writes back to it, such as an audio URL, passes with `context: DERIVED_WRITE_CONTEXT` from `/publishing`, which can never change `_status`, create, or promote a draft.
|
|
64
|
+
|
|
65
|
+
### Minor Changes
|
|
66
|
+
|
|
67
|
+
- 2e49ee7: `throughline migrate-imports [paths…] [--dry-run]`, a new bin: rewrites every 0.x `@forumone/throughline-*` import to its 1.0 home, by `docs/spec/1.0-exports.md`. It splits an import by where each name went, keeps `type` and aliases, rewrites admin component paths (`importMap.js` included), and points mocks, dynamic imports and module augmentation at the 1.0 counterpart for you to check. Names 1.0 removed or made internal are left in place and listed with what to use instead, as are the `package.json` dependencies to swap, and it exits 1 while anything is left. Run on forumone-2026, it rewrites 163 files and leaves the five imports `throughline()` replaces.
|
|
68
|
+
|
|
69
|
+
### Patch Changes
|
|
70
|
+
|
|
71
|
+
- 825f4e9: `@forumone/throughline-design-system`: the 1.0 design-system package, from `@forumone/throughline-design-contract` and `@forumone/throughline-design-system-payload`, by `docs/spec/1.0-exports.md`. It is published for the first time: design-system-payload was private and shipped TypeScript source, and this package builds to `dist`.
|
|
72
|
+
|
|
73
|
+
- `@forumone/throughline-design-contract` is `/contract`, and its `/lint` is `/lint`.
|
|
74
|
+
- design-system-payload's `/generate`, `/render`, `/client` and `/testing` keep their names. Its root (`fieldOverride` and the override types) is part of `/generate`.
|
|
75
|
+
- The `check-block-props` bin is unchanged, and runs the built CLI.
|
|
76
|
+
- Admin component paths are `@forumone/throughline-design-system/client#BlockSummary`, `#BlockGuidance` and `#RowSummary`, so a site's `importMap.js` changes.
|
|
77
|
+
- `/contract` and `/lint` need no peers. `payload`, `react`, `@payloadcms/ui`, `typescript` (which `/generate` uses to read component source) and `vitest` (for `/testing`) are optional peers.
|
|
78
|
+
|
|
79
|
+
`@forumone/throughline/components` now reads manifests through `@forumone/throughline-design-system/contract`.
|
|
80
|
+
|
|
81
|
+
- Updated dependencies [825f4e9]
|
|
82
|
+
- @forumone/throughline-design-system@1.0.0-pr-266-2941b02
|
|
83
|
+
|
|
3
84
|
## 1.0.0-next.2
|
|
4
85
|
|
|
5
86
|
### Major Changes
|
package/README.md
CHANGED
|
@@ -4,10 +4,9 @@ Throughline for Payload CMS: publishing behind a policy pipeline, approvals, the
|
|
|
4
4
|
reports, integrations, email and background jobs, with every feature reachable over MCP. One call
|
|
5
5
|
registers the suite; each part also lives on its own subpath.
|
|
6
6
|
|
|
7
|
-
> **
|
|
8
|
-
>
|
|
9
|
-
> [Upgrading from 0.x](https://github.com/forumone/throughline/blob/main/docs/guides/upgrading.md) moves a 0.x site onto it.
|
|
10
|
-
> Pre-releases publish as `1.0.0-next.N` under the `next` dist-tag.
|
|
7
|
+
> **Coming from 0.x?** This package is core, plugin-contract, publishing, workflows, audit,
|
|
8
|
+
> approvals, components, integrations and email together.
|
|
9
|
+
> [Upgrading from 0.x](https://github.com/forumone/throughline/blob/main/docs/guides/upgrading.md) moves a 0.x site onto it, with a codemod for the imports.
|
|
11
10
|
|
|
12
11
|
**Reference: [`docs/reference/throughline.md`](https://github.com/forumone/throughline/blob/main/docs/reference/throughline.md)**, with a page per plugin.
|
|
13
12
|
|
|
@@ -80,7 +79,7 @@ The reasoning is in [`1.0-throughline-call.md`](https://github.com/forumone/thro
|
|
|
80
79
|
## Installation
|
|
81
80
|
|
|
82
81
|
```bash
|
|
83
|
-
pnpm add @forumone/throughline
|
|
82
|
+
pnpm add @forumone/throughline
|
|
84
83
|
```
|
|
85
84
|
|
|
86
85
|
`payload@^3.89.0` is the one required peer. The rest are optional, each needed only by the subpaths that use it, and none is loaded by the root:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forumone/throughline",
|
|
3
|
-
"version": "1.0.0-
|
|
3
|
+
"version": "1.0.0-pr-266-2941b02",
|
|
4
4
|
"description": "Throughline: an editorial platform for Payload CMS. Publishing, approvals, audit, integrations, email and jobs, with every feature reachable over MCP.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
"dependencies": {
|
|
163
163
|
"zod": "^3.23.0",
|
|
164
164
|
"zod-to-json-schema": "^3.25.2",
|
|
165
|
-
"@forumone/throughline-design-system": "1.0.0-
|
|
165
|
+
"@forumone/throughline-design-system": "1.0.0-pr-266-2941b02"
|
|
166
166
|
},
|
|
167
167
|
"devDependencies": {
|
|
168
168
|
"@payloadcms/db-sqlite": "^3.83.0",
|
|
@@ -184,9 +184,9 @@
|
|
|
184
184
|
"resend": "^6.1.4",
|
|
185
185
|
"typescript": "^5.6.0",
|
|
186
186
|
"vitest": "^4.1.10",
|
|
187
|
-
"@forumone/throughline-reference-ds": "0.3.8-
|
|
188
|
-
"@forumone/throughline-tsconfig": "0.0.
|
|
189
|
-
"@forumone/throughline-eslint-config": "0.0.
|
|
187
|
+
"@forumone/throughline-reference-ds": "0.3.8-pr-266-2941b02",
|
|
188
|
+
"@forumone/throughline-tsconfig": "0.0.1-pr-266-2941b02",
|
|
189
|
+
"@forumone/throughline-eslint-config": "0.0.1-pr-266-2941b02"
|
|
190
190
|
},
|
|
191
191
|
"scripts": {
|
|
192
192
|
"build": "tsc -b",
|