← RiversideCONTENT HISTORY

Update to Riverside

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

WHAT CHANGED · RULE-BASED ANALYSIS

Package or technical metadata updated

Package contents changed in 22 files: .app.json, .codex-plugin/plugin.json, .mcp.json, …. Open the file diff to inspect the edits.

Observed in package metadata. These changes alone do not establish a new customer-facing feature.

Short excerpts from up to four changed fields. Open the full comparison for all changes.

File entries below show saved metadata, such as size and fingerprint. Open a changed file in the full comparison to read its text edits.

Package file

Before

Sep 30, 2026 · 23:19 UTC

8b1784f5e87c6a73520d1b47ff345d8e153482a26427459f1f37fe3a15da4aaf

After

Oct 8, 2026 · 12:02 UTC

5208b4c7267d13d0ffff729c60d524567d239a1ee787e10d24ede3e1a4430c94

Package file

Before

Sep 30, 2026 · 23:19 UTC

127

After

Oct 8, 2026 · 12:02 UTC

101

Package file

Before

Sep 30, 2026 · 23:19 UTC

2dc442c526abaf3907e11337cacd8ea30ea40292ba601fd4195808478744b71b

After

Oct 8, 2026 · 12:02 UTC

21ba966d1f720fc80661f43b527e3c83af1c46b55374e74c0401be819f99c0ae

Package file

Before

Sep 30, 2026 · 23:19 UTC

1571

After

Oct 8, 2026 · 12:02 UTC

12690

Compare saved observations

Download comparison JSON

skills/social-publishing/references/results-and-recovery.md

Lines starting with − were removed; lines starting with + were added. Other lines provide context.

--- before
+++ after
@@ -1,48 +1,81 @@
-# Results and recovery
+# Results, management and recovery
 
-Outcome interpretation, retry admissibility, and error-specific recovery after a
-publish is processing, partial, or failed, or after a timeout, transport failure,
-missing result, or any other unknown outcome. The main skill file's safety
-contract still governs every follow-up here.
-
-## Classify the outcome
-
-- **Processing or accepted for later completion:** explain that processing is
-  underway and the post should follow automatically. Relay a returned
-  user-facing message when present; do not expose a raw internal status or
-  resend the call.
-- **Timeout, transport failure, missing response, or unknown result:** say that
-  submission could have happened but cannot be confirmed. Stop. With no
-  idempotency key or authoritative status readback, retrying could duplicate a
-  live post.
-- **Explicit per-target failure:** fetch fresh platform guidance and evaluate
-  the retry gate below. A failure on one target does not undo or change another
-  target's result.
-
-## Retry gate
-
-A retry is admissible only when both the returned failure and current
-`social_get_publishing_guidelines` recovery guidance explicitly establish that
-no post was created and that retrying this failure is safe. Never retry a
-success, processing result, partial or ambiguous result, timeout, transport
-failure, or unknown outcome.
-
-Passing this gate makes a retry eligible; it does not authorize the call. Return
-to the main preview and obtain the required new confirmation, whether or not the
-payload changed. If the same explicit failure repeats after one clean retry,
-stop and report the platform's result.
-
-## Error-specific recovery
-
-Use the fresh live guidance for the failure in hand rather than a remembered
-error-code catalogue.
-
-- **Export required:** re-run the main routing table; this outcome matches its
-  scheduling-and-draft-export row, which supplies current compose choices.
-  Retry only if the explicit failure passes the retry gate, and return to the
-  main preview because the payload changed.
-- **Metadata or media rejected:** correct only what the live guidance and
-  returned failure identify, then return to the main preview and confirmation.
-- **YouTube copyright / Content-ID signal:** use video-editing's
-  `editing_get_export_publish_data` to inspect the edit's media and surface a
-  flagged match instead of retrying over it.
+## Find and inspect
+
+`social_list_uploads` needs studio/production ids. Default is the next 30 days;
+use past dates for published posts. Page with `offset`/`hasMore`; window totals
+are before platform/status filters, not filtered-row totals.
+
+Read `social_get_upload` before mutations. Independently check `editable`,
+`mediaEditable`, `cancellable`: rendering may allow only cancellation; failed
+may allow only editing. Match the account with connected platforms. Only
+`COMPLETED` proves live. Relay returned `postUrl`; null does not prove failure.
+Do not invent Facebook URLs.
+
+## Update or cancel
+
+Preview current account/platform, content, schedule, change and consequences;
+confirm each mutation. Refresh/reconfirm if material values changed.
+
+- `social_update_upload` requires `editable`. Send changing fields only and the
+  matching platform object; returned `content` is not an input template and
+  nulls cannot be sent back. `publishNow` posts immediately and cannot be undone;
+  never combine it with future `scheduledAt`. Use the main scheduling route.
+- Media changes require `mediaEditable`. Video cannot be removed or converted
+  to images, or vice versa. `assets` replaces all images; `[]` removes them only
+  on text-only platforms. X replies and LinkedIn comments replace whole lists:
+  start with current entries, preserve unchanged ones and X reply ids, and
+  preview deletions explicitly.
+- `social_cancel_upload` requires `cancellable`; it permanently removes the
+  post from Content Planner, with no restore or platform deletion. Success is
+  confirmed by its own response. Do not read back: cancelled ids now return
+  an authorization error.
+
+Live edits/removal happen on the platform. Never blindly repeat uncertain
+mutations, especially publish-now/cancellation.
+
+## Accounts
+
+Resolve required studio id/slug and production id through content-discovery.
+`social_connect_social_account` gives a user consent link. After they report
+completion, read connected platforms and compare ids
+with `connectedPlatformAccountIds`. If that snapshot is null, list accounts and
+ask which was added. If none appeared, ask about the browser result before a
+fresh link. Never poll by restarting connections. `isAddingAccount` selects an
+additional Instagram/X account; omit `returnTo` unless a current Riverside URL
+is known.
+
+Before `social_disconnect_social_account`, read accounts, name the target and
+warn that all its scheduled uploads are permanently cancelled; get explicit
+confirmation. For Facebook, every Page under that login is disconnected: name
+all affected Pages first. Other logins stay connected. Reconnection does not
+restore cancelled uploads.
+
+## Analytics
+
+`social_get_upload_analytics` reads a published post found by listing. Pass
+known `studioId` to diagnose permissions. Relay `asOf`; counts are not live. `hasData: false`, null metrics/days mean unavailable,
+never zero. Daily values are already differenced: do not sum/difference them.
+`frozen` means collection ended. `MISSING_ANALYTICS_SCOPE` requires reconnecting,
+not read retries. In listing views, missing fields mean lookup failed; null
+means no collected/available count.
+
+## Recovery
+
+Processing: report without resending. Timeout/transport failure/unusable result:
+stop publishing. Listing may investigate, but no matching row cannot prove no
+post; there is no idempotency key.
+
+For explicit failures, fetch fresh guidance. Both failure and guidance must
+prove no post and safe retry before a fresh upload is eligible. Never retry
+success, processing, partial/unknown outcomes. Preview/confirm again; stop if
+the failure repeats after one clean retry.
+
+Prefer in-place recovery. Re-read status/capabilities. `UNKNOWN`/missing failure
+category needs platform or Support verification before republishing. Expired
+connections may revive scheduled posts after reconnect: no new publish or
+`publishNow` until its fresh outcome is reconciled. Other confirmed failures may
+use eligible in-place update with the confirmation contract above.
+
+Export-required matches the draft-export route. Fix only identified metadata/
+media errors, then preview/confirm again. Keep the main YouTube copyright gate.
Full technical diff · 33 changed fields

changed /files/.app.json/sha256

BEFORE
"8b1784f5e87c6a73520d1b47ff345d8e153482a26427459f1f37fe3a15da4aaf"
AFTER
"5208b4c7267d13d0ffff729c60d524567d239a1ee787e10d24ede3e1a4430c94"

changed /files/.app.json/size

BEFORE
127
AFTER
101

changed /files/.codex-plugin~1plugin.json/sha256

BEFORE
"2dc442c526abaf3907e11337cacd8ea30ea40292ba601fd4195808478744b71b"
AFTER
"21ba966d1f720fc80661f43b527e3c83af1c46b55374e74c0401be819f99c0ae"

changed /files/.codex-plugin~1plugin.json/size

BEFORE
1571
AFTER
12690

added /files/.mcp.json

BEFORE
Field was absent
AFTER
{
  "sha256": "30ff86c6f3d3b6532dfb4cdfec9682dca4cc8c6e86beef3529c99ed30b072cd4",
  "size": 118
}

added /files/CHANGELOG.md

BEFORE
Field was absent
AFTER
{
  "sha256": "4e8e8665e7e81652f363b178e71194041926c958049fd0525ce1fbea9270f1b7",
  "size": 25751
}

added /files/LICENSE

BEFORE
Field was absent
AFTER
{
  "sha256": "8790ba96ccfbe5b3ac265dc39d69292ff7c6db916b29ee077e830949e49da64a",
  "size": 1075
}

added /files/README.md

BEFORE
Field was absent
AFTER
{
  "sha256": "39d3c7bd8430844592ec597513b488a8afbdbf4b718b8ab5a5d54b8d1adc9a42",
  "size": 4993
}

added /files/SECURITY.md

BEFORE
Field was absent
AFTER
{
  "sha256": "57be735bae95ee34e6e1c84a042c569ce3bd9a34e91f0f066f79bcb5e228d3f2",
  "size": 1749
}

added /files/agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "838e01831125eb9d06f65f209af0026d7bbc75c06638a9bc2e431726c734fce7",
  "size": 285
}

added /files/assets~1logo.png

BEFORE
Field was absent
AFTER
{
  "sha256": "9dfe43ecfec98613587108cf9af176d6f32ee354145b4b2b1e6bc80b89772aa0",
  "size": 8908
}

added /files/docs~1cursor-testing.md

BEFORE
Field was absent
AFTER
{
  "sha256": "287e3f4108c5f651337bd913fd3fd709ffc8308e50481ad6ebc1d232a73b1276",
  "size": 1969
}

changed /files/skills~1content-discovery~1SKILL.md/sha256

BEFORE
"3b6b1048cc7a0be31c31a6ebb8efe9efa9f935762014c410e82f8d4dbf83e737"
AFTER
"3a36dc21cf4c6d95c4e777a885e25251e6aceea9eb6a29c734eb6828ae48cd67"

changed /files/skills~1content-discovery~1SKILL.md/size

BEFORE
4406
AFTER
4433

changed /files/skills~1content-discovery~1references~1cross-skill-handoffs.md/sha256

BEFORE
"892f8e1bcfe0fae36bfcaa0bd05089e3c1076c8520e1066d40e6536958a24140"
AFTER
"8b24a7bc577dbb4d47397a0f59ad90f17f8b2ec1f5a2278f4684ca9972faa8a6"

changed /files/skills~1content-discovery~1references~1cross-skill-handoffs.md/size

BEFORE
3535
AFTER
3507

changed /files/skills~1content-discovery~1references~1hierarchy-navigation.md/sha256

BEFORE
"6cc5732844951274047786cb584bd3a8aad8febd750548f312334a6bbcf3e76a"
AFTER
"2f708dcf59756c9c8d871aab6da60790207bd422d477addc2d79a7440516d820"

changed /files/skills~1content-discovery~1references~1hierarchy-navigation.md/size

BEFORE
5759
AFTER
5630

added /files/skills~1podcast-hosting~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "1209277b827acbb29a2941b762e564644b45ebf88dc26288bcae572438b2c328",
  "size": 5343
}

added /files/skills~1podcast-hosting~1agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "65d0f15b026deb1d44d3d48be3db804c298c0e7fed9a6ccfc0e38cdb2dfe523a",
  "size": 438
}

changed /files/skills~1setup~1SKILL.md/sha256

BEFORE
"cbb22ffd043ecce208185c2d21595aa6b4aec736ed64376ea41a0b97709fcad4"
AFTER
"eebcfdfe619456a89c9022ee77a465204346ea20a29de54258d38a2fd290f738"

changed /files/skills~1setup~1SKILL.md/size

BEFORE
6808
AFTER
6864

changed /files/skills~1social-publishing~1SKILL.md/sha256

BEFORE
"32b57df8b4b8801db5e6ca8a9f3b1a0b1a5ed03393ddedadbdc3fbc79fb33492"
AFTER
"3e469f1f689d4aa94ef8395ffd45a7070e2051e5197a05d1acff7b405c7433f3"

changed /files/skills~1social-publishing~1SKILL.md/size

BEFORE
5327
AFTER
3545

changed /files/skills~1social-publishing~1agents~1openai.yaml/sha256

BEFORE
"06d23ae7425491bbfca0b12a8e7d3b8c59e29c6a14fa73270de83fe51b4e11d5"
AFTER
"c90b3607117403cb98f91aca5078ea224d1f4d7703a02d370d52ceee886f8d01"

changed /files/skills~1social-publishing~1agents~1openai.yaml/size

BEFORE
498
AFTER
489

changed /files/skills~1social-publishing~1references~1results-and-recovery.md/sha256

BEFORE
"37ba93f4c88cfa2f2182df89e234acdbabecb617c255e6e6d51e90d903f3f877"
AFTER
"379ce87be9e834569ea2b1b0de9b9b5343935bf5e3531fa5b8a326ba59f7a35b"

changed /files/skills~1social-publishing~1references~1results-and-recovery.md/size

BEFORE
2365
AFTER
4222

changed /files/skills~1social-publishing~1references~1scheduling-and-draft-export.md/sha256

BEFORE
"0967a739ff57bda775c5feb289f05bb764a9ae67c82335712376068bdb7e4146"
AFTER
"64366be3dd790e65de63a0ceec4810493142e99aa6220c73828bf80c6abe875e"

changed /files/skills~1social-publishing~1references~1scheduling-and-draft-export.md/size

BEFORE
1935
AFTER
2037

added /files/skills~1social-publishing~1references~1upload-status.md

BEFORE
Field was absent
AFTER
{
  "sha256": "abf28bc7d22877d02fee27c8e6e1087bd8cf4b4a640302bede582d84c8d7bee7",
  "size": 1973
}

changed /files/skills~1video-editing~1SKILL.md/sha256

BEFORE
"236283bc92ab461faa1913f37f0a51c627523ac29e23c196e2885052888e97ef"
AFTER
"98f0764161ca1e49a6c7cb7c4284a4be8135c2e80a42a44fd24cb3c788665bde"

changed /files/skills~1video-editing~1SKILL.md/size

BEFORE
8506
AFTER
8490
Full snapshot data
{
  "files": {
    ".app.json": {
      "sha256": "5208b4c7267d13d0ffff729c60d524567d239a1ee787e10d24ede3e1a4430c94",
      "size": 101
    },
    ".codex-plugin/plugin.json": {
      "sha256": "21ba966d1f720fc80661f43b527e3c83af1c46b55374e74c0401be819f99c0ae",
      "size": 12690
    },
    ".mcp.json": {
      "sha256": "30ff86c6f3d3b6532dfb4cdfec9682dca4cc8c6e86beef3529c99ed30b072cd4",
      "size": 118
    },
    "CHANGELOG.md": {
      "sha256": "4e8e8665e7e81652f363b178e71194041926c958049fd0525ce1fbea9270f1b7",
      "size": 25751
    },
    "LICENSE": {
      "sha256": "8790ba96ccfbe5b3ac265dc39d69292ff7c6db916b29ee077e830949e49da64a",
      "size": 1075
    },
    "README.md": {
      "sha256": "39d3c7bd8430844592ec597513b488a8afbdbf4b718b8ab5a5d54b8d1adc9a42",
      "size": 4993
    },
    "SECURITY.md": {
      "sha256": "57be735bae95ee34e6e1c84a042c569ce3bd9a34e91f0f066f79bcb5e228d3f2",
      "size": 1749
    },
    "agents/openai.yaml": {
      "sha256": "838e01831125eb9d06f65f209af0026d7bbc75c06638a9bc2e431726c734fce7",
      "size": 285
    },
    "assets/logo.png": {
      "sha256": "9dfe43ecfec98613587108cf9af176d6f32ee354145b4b2b1e6bc80b89772aa0",
      "size": 8908
    },
    "docs/cursor-testing.md": {
      "sha256": "287e3f4108c5f651337bd913fd3fd709ffc8308e50481ad6ebc1d232a73b1276",
      "size": 1969
    },
    "skills/content-discovery/SKILL.md": {
      "sha256": "3a36dc21cf4c6d95c4e777a885e25251e6aceea9eb6a29c734eb6828ae48cd67",
      "size": 4433
    },
    "skills/content-discovery/agents/openai.yaml": {
      "sha256": "4735db0277a6a7fddec4e9f514eb4c106316c135d69b7963bc98d165fd79c798",
      "size": 521
    },
    "skills/content-discovery/references/cross-skill-handoffs.md": {
      "sha256": "8b24a7bc577dbb4d47397a0f59ad90f17f8b2ec1f5a2278f4684ca9972faa8a6",
      "size": 3507
    },
    "skills/content-discovery/references/hierarchy-navigation.md": {
      "sha256": "2f708dcf59756c9c8d871aab6da60790207bd422d477addc2d79a7440516d820",
      "size": 5630
    },
    "skills/content-discovery/references/search.md": {
      "sha256": "d66388bee1eb00062ee184eb438b978b9c930b72da0827abd0cfff5b97d83deb",
      "size": 3922
    },
    "skills/podcast-hosting/SKILL.md": {
      "sha256": "1209277b827acbb29a2941b762e564644b45ebf88dc26288bcae572438b2c328",
      "size": 5343
    },
    "skills/podcast-hosting/agents/openai.yaml": {
      "sha256": "65d0f15b026deb1d44d3d48be3db804c298c0e7fed9a6ccfc0e38cdb2dfe523a",
      "size": 438
    },
    "skills/setup/SKILL.md": {
      "sha256": "eebcfdfe619456a89c9022ee77a465204346ea20a29de54258d38a2fd290f738",
      "size": 6864
    },
    "skills/setup/agents/openai.yaml": {
      "sha256": "822b6ef9df7b862de4475b6bd85b14d145ae93208a7bdafd39067e392dae9a1f",
      "size": 530
    },
    "skills/social-publishing/SKILL.md": {
      "sha256": "3e469f1f689d4aa94ef8395ffd45a7070e2051e5197a05d1acff7b405c7433f3",
      "size": 3545
    },
    "skills/social-publishing/agents/openai.yaml": {
      "sha256": "c90b3607117403cb98f91aca5078ea224d1f4d7703a02d370d52ceee886f8d01",
      "size": 489
    },
    "skills/social-publishing/references/results-and-recovery.md": {
      "sha256": "379ce87be9e834569ea2b1b0de9b9b5343935bf5e3531fa5b8a326ba59f7a35b",
      "size": 4222
    },
    "skills/social-publishing/references/scheduling-and-draft-export.md": {
      "sha256": "64366be3dd790e65de63a0ceec4810493142e99aa6220c73828bf80c6abe875e",
      "size": 2037
    },
    "skills/social-publishing/references/upload-status.md": {
      "sha256": "abf28bc7d22877d02fee27c8e6e1087bd8cf4b4a640302bede582d84c8d7bee7",
      "size": 1973
    },
    "skills/video-editing/SKILL.md": {
      "sha256": "98f0764161ca1e49a6c7cb7c4284a4be8135c2e80a42a44fd24cb3c788665bde",
      "size": 8490
    },
    "skills/video-editing/agents/openai.yaml": {
      "sha256": "d444bf957a3f6ed2174e1320f15610a7abb76dee670cc2488022121f5660d917",
      "size": 514
    },
    "skills/video-editing/references/captions-and-brand.md": {
      "sha256": "1c784b10d3924a49c4d91a253bbc03661c3ade3876cbfba596232333d90ce178",
      "size": 3781
    },
    "skills/video-editing/references/cuts-and-audio.md": {
      "sha256": "7f73b33da81628ad8c1b04c9416c044637406f979980e5063db6ec711d3f5ba9",
      "size": 4906
    },
    "skills/video-editing/references/edit-lifecycle.md": {
      "sha256": "232fccf158f71fe450481bf3f8ddf98da85cc533879c21eaf94966a357852d22",
      "size": 5631
    },
    "skills/video-editing/references/transcript-editing.md": {
      "sha256": "e86a50b584d66724dbb08117459672a7aca4566143682b15d107c2dece29186c",
      "size": 4484
    },
    "skills/video-editing/references/visuals-and-media.md": {
      "sha256": "9111069d7c322e00e35e95040c7a641951b9a1e8ede48597378d2caeadae5728",
      "size": 5098
    }
  }
}

SHA-256 of public snapshot: 6e0490b4cf5076089d234d048d7dfd7a5d39c20b5aa8b78d674e6a1fc630ec4f