← RiversideCONTENT HISTORY

Update to Riverside

Snapshot Oct 8, 2026 · 12:02 UTC · version 1.1.1

Collection source: downloaded plugin package. These snapshots do not have a confirmed matching collection source. Differences in file lists alone do not establish changes to the package.

WHAT CHANGED · RULE-BASED ANALYSIS

Instructions updated for social-publishing

Instruction wording changed from “>” to “Publish/schedule Riverside clips, manage unpublished posts and social accounts, or read analytics on YouTube, TikTok, Instagram, Facebook, LinkedIn or X. Clip editing uses video-editing; live posts must be edited/removed on their platform.”. 41 additional added or edited lines are in the evidence.

Observed in instructions or declared skills. Runtime behavior has not been tested.

Product description

Before

Use when the user wants to post, share, publish, upload, or schedule a Riverside clip to a connected social platform — YouTube, YouTube Shorts, TikTok, Instagram, Facebook, LinkedIn, or X (e.g. "post my clip to TikTok", "schedule this to...

After

Publish/schedule Riverside clips, manage unpublished posts and social accounts, or read analytics on YouTube, TikTok, Instagram, Facebook, LinkedIn or X. Clip editing uses video-editing; live posts must be edited/removed on their platform.

Skill instructions

Before

> Use when the user wants to post, share, publish, upload, or schedule a Riverside clip to a connected social platform — YouTube, YouTube Shorts, TikTok, Instagram, Facebook, LinkedIn, or X (e.g. "post my clip to TikTok", "schedu...

After

Publish/schedule Riverside clips, manage unpublished posts and social accounts, or read analytics on YouTube, TikTok, Instagram, Facebook, LinkedIn or X. Clip editing uses video-editing; live posts must be edited/removed on their platfor...

Supporting files

Before

[{"relative_path":"agents/openai.yaml","size_in_bytes":498},{"relative_path":"references/results-and-recovery.md","size_in_bytes":2365},{"relative_path":"references/scheduling-and-draft-export.md","size_in_bytes":1935}]

After

[{"relative_path":"agents/openai.yaml","size_in_bytes":489},{"relative_path":"references/results-and-recovery.md","size_in_bytes":4222},{"relative_path":"references/scheduling-and-draft-export.md","size_in_bytes":2037},{"relative_path":"...

Compare saved observations

Download comparison JSON
Full technical diff · 3 changed fields

changed /description

BEFORE
"Use when the user wants to post, share, publish, upload, or schedule a Riverside clip to a connected social platform — YouTube, YouTube Shorts, TikTok, Instagram, Facebook, LinkedIn, or X (e.g. \"post my clip to TikTok\", \"schedule this to YouTube for 9am\", \"share on LinkedIn\"). Not for creating or editing clips (see video-editing), connecting or disconnecting social accounts, or managing posts once they are published."
AFTER
"Publish/schedule Riverside clips, manage unpublished posts and social accounts, or read analytics on YouTube, TikTok, Instagram, Facebook, LinkedIn or X. Clip editing uses video-editing; live posts must be edited/removed on their platform."

changed /included_files

BEFORE
[
  {
    "relative_path": "agents/openai.yaml",
    "size_in_bytes": 498
  },
  {
    "relative_path": "references/results-and-recovery.md",
    "size_in_bytes": 2365
  },
  {
    "relative_path": "references/scheduling-and-draft-export.md",
    "size_in_bytes": 1935
  }
]
AFTER
[
  {
    "relative_path": "agents/openai.yaml",
    "size_in_bytes": 489
  },
  {
    "relative_path": "references/results-and-recovery.md",
    "size_in_bytes": 4222
  },
  {
    "relative_path": "references/scheduling-and-draft-export.md",
    "size_in_bytes": 2037
  },
  {
    "relative_path": "references/upload-status.md",
    "size_in_bytes": 1973
  }
]

changed /skill_md_contents

BEFORE
"---\nname: social-publishing\ndescription: >\n  Use when the user wants to post, share, publish, upload, or schedule a\n  Riverside clip to a connected social platform — YouTube, YouTube Shorts,\n  TikTok, Instagram, Facebook, LinkedIn, or X (e.g. \"post my clip to TikTok\",\n  \"schedule this to YouTube for 9am\", \"share on LinkedIn\"). Not for creating or\n  editing clips (see video-editing), connecting or disconnecting social\n  accounts, or managing posts once they are published.\n---\n\n# Social publishing\n\nPublishes a Riverside clip to an external platform. Tools are exposed at the\ngateway with the `social_` prefix.\n\n| Tool | Purpose |\n|---|---|\n| `social_get_connected_platforms` | A studio's connected platforms and accounts, with each account's live options and limits |\n| `social_get_publishing_guidelines` | Current per-platform metadata rules, media constraints, workflow, and error recovery |\n| `social_upload_create` | Publish or schedule one clip to one platform |\n\n## Safety contract\n\n`social_upload_create` is destructive and open-world: it can create a real post\nand this MCP has no cancel, edit, delete, undo, or unpublish operation. Never\ncall it to inspect readiness, test an account, diagnose a failure, or learn what\nan argument does.\n\nTreat every success, processing result, timeout, transport failure, or unknown\noutcome as potentially having created a post. Never repeat such a call. Only an\nexplicit failure that matches the Results and recovery routing row below can\nbecome eligible for retry.\n\nThe current tool schema, chosen account entry from\n`social_get_connected_platforms`, and platform result from\n`social_get_publishing_guidelines` are the authority for fields, allowed values,\nlimits, formats, and recovery — never memory or values copied into this file.\n\n## Prerequisites\n\n- A `studioId`. Only content-discovery can find one\n  (`platform_list_studios`); no social tool discovers a studio.\n- A `clipId`, typically an exported edit id from video-editing. An unexported\n  clip may require the export-first choices in the scheduling reference.\n- At least one connected account on the target platform.\n\n## Mandatory routing\n\nBefore the first social workflow call, evaluate every row against the user's\nrequest and known context. Read every matching reference, and no unrelated\nreference. Re-evaluate the table after every social response or failed call;\nread any newly matching reference before the next workflow call.\n\n| Observable condition | Required reference |\n|---|---|\n| The user names a future or wall-clock time, or the clip is or may be a draft/unexported and require `composeSettings` | [Scheduling and draft export](references/scheduling-and-draft-export.md) |\n| The publish is processing, partial, or failed; or the call times out, has a transport failure, returns no usable result, or otherwise leaves the outcome unknown | [Results and recovery](references/results-and-recovery.md) |\n\nBoth rows can apply during one workflow. A wall-clock phrase such as \"tomorrow\nat 9\" matches the first row even before its timezone is known.\n\n## Publish workflow\n\n1. **Establish the studio.** Obtain the `studioId`; if several studios fit, ask\n   the user to choose.\n\n2. **Select the account.** Call\n   `social_get_connected_platforms(studioId)`. Use the target account's\n   `platformAccountId` and any live account-specific options. If several\n   accounts fit, ask the user to choose the human-readable account or channel.\n   Never publish without a valid `platformAccountId`.\n\n   An empty `accounts: []` is an ambiguous account-detail lookup failure, not\n   proof that nothing is connected. Retry this read once; if it remains empty,\n   report that account details could not be fetched and stop.\n\n3. **Load live rules.** Call `social_get_publishing_guidelines` for the chosen\n   platform. Compose metadata using its current constraints and the current\n   `social_upload_create` schema. Apply the platform's counting rules rather\n   than raw string length.\n\n   Never infer or default YouTube privacy. Ask the user to select from the live\n   allowed values. Before a YouTube upload,\n   `editing_get_export_publish_data` reports copyright / Content-ID signals for\n   the edit's media; surface a flagged match rather than publishing over it.\n\n4. **Preview and confirm every target.** Show the exact metadata,\n   human-readable account or channel, and applicable privacy or visibility.\n   Include any resolved schedule and compose choices supplied by the scheduling\n   reference. State that this MCP cannot undo or manage the resulting post,\n   then wait for explicit confirmation.\n\n   Confirmation authorizes one call for only the previewed target and payload.\n   A retry needs a new confirmation even when unchanged. If any material field\n   changes, preview the change. If the user declines, hesitates, changes\n   direction, or withdraws confirmation, stop.\n\n5. **Publish once.** Make one `social_upload_create` call for each separately\n   confirmed target account and platform. Do not turn one confirmation into\n   extra targets or calls.\n\n6. **Report each result separately.** Identify the target account, submitted\n   visibility and schedule, and its own returned outcome. Never flatten several\n   calls into a single success or failure. Re-run mandatory routing before any\n   follow-up action.\n"
AFTER
"---\nname: social-publishing\ndescription: Publish/schedule Riverside clips, manage unpublished posts and social accounts, or read analytics on YouTube, TikTok, Instagram, Facebook, LinkedIn or X. Clip editing uses video-editing; live posts must be edited/removed on their platform.\n---\n\n# Social publishing\n\n| Tool | Purpose |\n|---|---|\n| `social_get_connected_platforms` | Accounts and live limits |\n| `social_get_publishing_guidelines` | Platform rules and recovery |\n| `social_upload_create` | Publish or schedule a clip |\n| `social_get_upload_status` | Publish outcome |\n| `social_list_uploads` | Find posts |\n| `social_get_upload` | Content and capability flags |\n| `social_update_upload` | Change an unpublished post |\n| `social_cancel_upload` | Permanently cancel a cancellable post |\n| `social_get_upload_analytics` | Collected metrics |\n| `social_connect_social_account` | User authorization link |\n| `social_disconnect_social_account` | Disconnect and cancel scheduled posts |\n\n## Safety contract\n\nCreate and `publishNow` can produce real posts: never call them to test or\ndiagnose. No tool can edit, delete or unpublish a live post. Cancellation cannot\nbe undone. Success, processing, timeout, transport failure and unknown outcomes\nmay have posted: never repeat the publish. Only explicit failures passing the\nrecovery gate can become eligible for a fresh publish.\n\nUse current schemas, connected account limits and live guidelines. Resolve\nstudio/production ids through content-discovery. Publishing needs `clipId`\n(typically an exported edit id) and a connected account.\n\n## Mandatory routing\n\nBefore social calls, read all matching references and no unrelated ones. After\nevery response/failure, re-evaluate and read new matches before the next call.\n\n| Observable condition | Required reference |\n|---|---|\n| Wall-clock/future time, or draft export may need `composeSettings` | [Scheduling and draft export](references/scheduling-and-draft-export.md) |\n| Posts, analytics, accounts, or processing/partial/failed/unknown publish (timeout, transport failure or unusable response) | [Results, management and recovery](references/results-and-recovery.md) |\n| A publish was made and its outcome is unconfirmed | [Publish outcome](references/upload-status.md) |\n\n\"Tomorrow at 9\" matches scheduling before its timezone is known.\n\n## Publish workflow\n\n1. Resolve `studioId` and read connected platforms. Select a valid\n   `platformAccountId` by account/channel name; ask if studio/account is unclear.\n   Empty `accounts: []` may mean failed account-detail lookup. Retry this read\n   once; if still empty, report unavailable details and stop.\n2. Load `social_get_publishing_guidelines` for the platform. Use current create\n   schema and platform counting rules, not raw string length. Ask for YouTube\n   privacy from live values; never infer/default it. Before YouTube publishing,\n   inspect `editing_get_export_publish_data` and surface copyright/Content-ID\n   flags instead of publishing over them.\n3. Show exact metadata, account/channel, visibility, resolved schedule and\n   compose choices. Explain that a live post cannot be undone here; wait for\n   explicit confirmation. It covers one call for that target/payload. Preview\n   material changes; retries need new confirmation even if unchanged. Stop on\n   refusal, hesitation, changed direction or withdrawn confirmation.\n4. Make one `social_upload_create` call per separately confirmed target/payload.\n5. Report account, visibility, schedule and outcome per target; re-run routing.\n"

SKILL.md line diff

--- before
+++ after
@@ -1,106 +1,64 @@
 ---
 name: social-publishing
-description: >
-  Use when the user wants to post, share, publish, upload, or schedule a
-  Riverside clip to a connected social platform — YouTube, YouTube Shorts,
-  TikTok, Instagram, Facebook, LinkedIn, or X (e.g. "post my clip to TikTok",
-  "schedule this to YouTube for 9am", "share on LinkedIn"). Not for creating or
-  editing clips (see video-editing), connecting or disconnecting social
-  accounts, or managing posts once they are published.
+description: Publish/schedule Riverside clips, manage unpublished posts and social accounts, or read analytics on YouTube, TikTok, Instagram, Facebook, LinkedIn or X. Clip editing uses video-editing; live posts must be edited/removed on their platform.
 ---
 
 # Social publishing
 
-Publishes a Riverside clip to an external platform. Tools are exposed at the
-gateway with the `social_` prefix.
-
 | Tool | Purpose |
 |---|---|
-| `social_get_connected_platforms` | A studio's connected platforms and accounts, with each account's live options and limits |
-| `social_get_publishing_guidelines` | Current per-platform metadata rules, media constraints, workflow, and error recovery |
-| `social_upload_create` | Publish or schedule one clip to one platform |
+| `social_get_connected_platforms` | Accounts and live limits |
+| `social_get_publishing_guidelines` | Platform rules and recovery |
+| `social_upload_create` | Publish or schedule a clip |
+| `social_get_upload_status` | Publish outcome |
+| `social_list_uploads` | Find posts |
+| `social_get_upload` | Content and capability flags |
+| `social_update_upload` | Change an unpublished post |
+| `social_cancel_upload` | Permanently cancel a cancellable post |
+| `social_get_upload_analytics` | Collected metrics |
+| `social_connect_social_account` | User authorization link |
+| `social_disconnect_social_account` | Disconnect and cancel scheduled posts |
 
 ## Safety contract
 
-`social_upload_create` is destructive and open-world: it can create a real post
-and this MCP has no cancel, edit, delete, undo, or unpublish operation. Never
-call it to inspect readiness, test an account, diagnose a failure, or learn what
-an argument does.
-
-Treat every success, processing result, timeout, transport failure, or unknown
-outcome as potentially having created a post. Never repeat such a call. Only an
-explicit failure that matches the Results and recovery routing row below can
-become eligible for retry.
-
-The current tool schema, chosen account entry from
-`social_get_connected_platforms`, and platform result from
-`social_get_publishing_guidelines` are the authority for fields, allowed values,
-limits, formats, and recovery — never memory or values copied into this file.
-
-## Prerequisites
-
-- A `studioId`. Only content-discovery can find one
-  (`platform_list_studios`); no social tool discovers a studio.
-- A `clipId`, typically an exported edit id from video-editing. An unexported
-  clip may require the export-first choices in the scheduling reference.
-- At least one connected account on the target platform.
+Create and `publishNow` can produce real posts: never call them to test or
+diagnose. No tool can edit, delete or unpublish a live post. Cancellation cannot
+be undone. Success, processing, timeout, transport failure and unknown outcomes
+may have posted: never repeat the publish. Only explicit failures passing the
+recovery gate can become eligible for a fresh publish.
+
+Use current schemas, connected account limits and live guidelines. Resolve
+studio/production ids through content-discovery. Publishing needs `clipId`
+(typically an exported edit id) and a connected account.
 
 ## Mandatory routing
 
-Before the first social workflow call, evaluate every row against the user's
-request and known context. Read every matching reference, and no unrelated
-reference. Re-evaluate the table after every social response or failed call;
-read any newly matching reference before the next workflow call.
+Before social calls, read all matching references and no unrelated ones. After
+every response/failure, re-evaluate and read new matches before the next call.
 
 | Observable condition | Required reference |
 |---|---|
-| The user names a future or wall-clock time, or the clip is or may be a draft/unexported and require `composeSettings` | [Scheduling and draft export](references/scheduling-and-draft-export.md) |
-| The publish is processing, partial, or failed; or the call times out, has a transport failure, returns no usable result, or otherwise leaves the outcome unknown | [Results and recovery](references/results-and-recovery.md) |
+| Wall-clock/future time, or draft export may need `composeSettings` | [Scheduling and draft export](references/scheduling-and-draft-export.md) |
+| Posts, analytics, accounts, or processing/partial/failed/unknown publish (timeout, transport failure or unusable response) | [Results, management and recovery](references/results-and-recovery.md) |
+| A publish was made and its outcome is unconfirmed | [Publish outcome](references/upload-status.md) |
 
-Both rows can apply during one workflow. A wall-clock phrase such as "tomorrow
-at 9" matches the first row even before its timezone is known.
+"Tomorrow at 9" matches scheduling before its timezone is known.
 
 ## Publish workflow
 
-1. **Establish the studio.** Obtain the `studioId`; if several studios fit, ask
-   the user to choose.
-
-2. **Select the account.** Call
-   `social_get_connected_platforms(studioId)`. Use the target account's
-   `platformAccountId` and any live account-specific options. If several
-   accounts fit, ask the user to choose the human-readable account or channel.
-   Never publish without a valid `platformAccountId`.
-
-   An empty `accounts: []` is an ambiguous account-detail lookup failure, not
-   proof that nothing is connected. Retry this read once; if it remains empty,
-   report that account details could not be fetched and stop.
-
-3. **Load live rules.** Call `social_get_publishing_guidelines` for the chosen
-   platform. Compose metadata using its current constraints and the current
-   `social_upload_create` schema. Apply the platform's counting rules rather
-   than raw string length.
-
-   Never infer or default YouTube privacy. Ask the user to select from the live
-   allowed values. Before a YouTube upload,
-   `editing_get_export_publish_data` reports copyright / Content-ID signals for
-   the edit's media; surface a flagged match rather than publishing over it.
-
-4. **Preview and confirm every target.** Show the exact metadata,
-   human-readable account or channel, and applicable privacy or visibility.
-   Include any resolved schedule and compose choices supplied by the scheduling
-   reference. State that this MCP cannot undo or manage the resulting post,
-   then wait for explicit confirmation.
-
-   Confirmation authorizes one call for only the previewed target and payload.
-   A retry needs a new confirmation even when unchanged. If any material field
-   changes, preview the change. If the user declines, hesitates, changes
-   direction, or withdraws confirmation, stop.
-
-5. **Publish once.** Make one `social_upload_create` call for each separately
-   confirmed target account and platform. Do not turn one confirmation into
-   extra targets or calls.
-
-6. **Report each result separately.** Identify the target account, submitted
-   visibility and schedule, and its own returned outcome. Never flatten several
-   calls into a single success or failure. Re-run mandatory routing before any
-   follow-up action.
+1. Resolve `studioId` and read connected platforms. Select a valid
+   `platformAccountId` by account/channel name; ask if studio/account is unclear.
+   Empty `accounts: []` may mean failed account-detail lookup. Retry this read
+   once; if still empty, report unavailable details and stop.
+2. Load `social_get_publishing_guidelines` for the platform. Use current create
+   schema and platform counting rules, not raw string length. Ask for YouTube
+   privacy from live values; never infer/default it. Before YouTube publishing,
+   inspect `editing_get_export_publish_data` and surface copyright/Content-ID
+   flags instead of publishing over them.
+3. Show exact metadata, account/channel, visibility, resolved schedule and
+   compose choices. Explain that a live post cannot be undone here; wait for
+   explicit confirmation. It covers one call for that target/payload. Preview
+   material changes; retries need new confirmation even if unchanged. Stop on
+   refusal, hesitation, changed direction or withdrawn confirmation.
+4. Make one `social_upload_create` call per separately confirmed target/payload.
+5. Report account, visibility, schedule and outcome per target; re-run routing.
Full snapshot data
{
  "description": "Publish/schedule Riverside clips, manage unpublished posts and social accounts, or read analytics on YouTube, TikTok, Instagram, Facebook, LinkedIn or X. Clip editing uses video-editing; live posts must be edited/removed on their platform.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 489
    },
    {
      "relative_path": "references/results-and-recovery.md",
      "size_in_bytes": 4222
    },
    {
      "relative_path": "references/scheduling-and-draft-export.md",
      "size_in_bytes": 2037
    },
    {
      "relative_path": "references/upload-status.md",
      "size_in_bytes": 1973
    }
  ],
  "name": "social-publishing",
  "skill_md_contents": "---\nname: social-publishing\ndescription: Publish/schedule Riverside clips, manage unpublished posts and social accounts, or read analytics on YouTube, TikTok, Instagram, Facebook, LinkedIn or X. Clip editing uses video-editing; live posts must be edited/removed on their platform.\n---\n\n# Social publishing\n\n| Tool | Purpose |\n|---|---|\n| `social_get_connected_platforms` | Accounts and live limits |\n| `social_get_publishing_guidelines` | Platform rules and recovery |\n| `social_upload_create` | Publish or schedule a clip |\n| `social_get_upload_status` | Publish outcome |\n| `social_list_uploads` | Find posts |\n| `social_get_upload` | Content and capability flags |\n| `social_update_upload` | Change an unpublished post |\n| `social_cancel_upload` | Permanently cancel a cancellable post |\n| `social_get_upload_analytics` | Collected metrics |\n| `social_connect_social_account` | User authorization link |\n| `social_disconnect_social_account` | Disconnect and cancel scheduled posts |\n\n## Safety contract\n\nCreate and `publishNow` can produce real posts: never call them to test or\ndiagnose. No tool can edit, delete or unpublish a live post. Cancellation cannot\nbe undone. Success, processing, timeout, transport failure and unknown outcomes\nmay have posted: never repeat the publish. Only explicit failures passing the\nrecovery gate can become eligible for a fresh publish.\n\nUse current schemas, connected account limits and live guidelines. Resolve\nstudio/production ids through content-discovery. Publishing needs `clipId`\n(typically an exported edit id) and a connected account.\n\n## Mandatory routing\n\nBefore social calls, read all matching references and no unrelated ones. After\nevery response/failure, re-evaluate and read new matches before the next call.\n\n| Observable condition | Required reference |\n|---|---|\n| Wall-clock/future time, or draft export may need `composeSettings` | [Scheduling and draft export](references/scheduling-and-draft-export.md) |\n| Posts, analytics, accounts, or processing/partial/failed/unknown publish (timeout, transport failure or unusable response) | [Results, management and recovery](references/results-and-recovery.md) |\n| A publish was made and its outcome is unconfirmed | [Publish outcome](references/upload-status.md) |\n\n\"Tomorrow at 9\" matches scheduling before its timezone is known.\n\n## Publish workflow\n\n1. Resolve `studioId` and read connected platforms. Select a valid\n   `platformAccountId` by account/channel name; ask if studio/account is unclear.\n   Empty `accounts: []` may mean failed account-detail lookup. Retry this read\n   once; if still empty, report unavailable details and stop.\n2. Load `social_get_publishing_guidelines` for the platform. Use current create\n   schema and platform counting rules, not raw string length. Ask for YouTube\n   privacy from live values; never infer/default it. Before YouTube publishing,\n   inspect `editing_get_export_publish_data` and surface copyright/Content-ID\n   flags instead of publishing over them.\n3. Show exact metadata, account/channel, visibility, resolved schedule and\n   compose choices. Explain that a live post cannot be undone here; wait for\n   explicit confirmation. It covers one call for that target/payload. Preview\n   material changes; retries need new confirmation even if unchanged. Stop on\n   refusal, hesitation, changed direction or withdrawn confirmation.\n4. Make one `social_upload_create` call per separately confirmed target/payload.\n5. Report account, visibility, schedule and outcome per target; re-run routing.\n"
}

SHA-256 of public snapshot: 8d34064dc0bd749e8bd2bb9cd92280bf6035b7e1b3c63a9f969baf6eb51a1699