← Documentation home

Canonical Markdown source · Oct 20, 2018

Facebook Page publishing

ops/facebook-page-publishing.md · 133 lines · SHA-256 b2473536eaa8

Meta Museum connects to the Meta Graph API as the Sun & Rain Works Publisher

app. The integration is deliberately supervised: agents may prepare drafts, but

draft artifacts cannot authorize publication and the CLI will not publish

without an exact digest-bound human approval.

Server-only configuration

Keep these values in the local or deployment secret store. Never prefix them

with `NEXT_PUBLIC_` and never place tokens in URLs or logs.


SUN_AND_RAIN_WORKS_PUBLISHER_APP_ID=
SUN_AND_RAIN_WORKS_PUBLISHER_APP_SECRET=
SUN_AND_RAIN_WORKS_PUBLISHER_PAGE_ID=
SUN_AND_RAIN_WORKS_PUBLISHER_PAGE_ACCESS_TOKEN=
META_GRAPH_API_VERSION=v26.0
SUN_AND_RAIN_WORKS_FACEBOOK_PUBLICATION_ENABLED=false

The App ID and App Secret are retained for Meta configuration and future token

maintenance. The current publisher uses only the Page ID and Page access token.

Verify the connection

This performs a read-only identity request and prints no token:


pnpm facebook:page -- verify

Prepare an agent draft

Write the proposed copy to a UTF-8 text file. At least one public HTTPS source is

required. The output path is non-overwriting.


pnpm facebook:page -- draft `
  --message-file=storage/facebook/proposed-post.txt `
  --link=https://www.metamuseum.org/provenance-research `
  --source-url=https://linked.art/model/provenance/ `
  --out=artifacts/facebook/draft-2026-08-21.json

Review the complete message, link, sources, and `digestSha256` in the generated

JSON. Drafts always retain `publicationApproved: false`.

Publish after human approval

Publication is a consequential external action. Enable it only for the approved

run, supply the exact reviewed digest, identify the accountable operator, and

use the literal attestation shown below.


$env:SUN_AND_RAIN_WORKS_FACEBOOK_PUBLICATION_ENABLED = "true"
pnpm facebook:page -- publish `
  --draft=artifacts/facebook/draft-2026-08-21.json `
  --approve-digest=<EXACT_64_CHARACTER_DIGEST> `
  --approver-id=<ACCOUNTABLE_OPERATOR_ID> `
  --executor-agent-id=agent:clio-social-editor `
  --human-attestation=I_APPROVE_PUBLICATION

The command replays the draft digest immediately before posting, sends the token

in the authorization header, and writes a non-overwriting receipt containing the

Meta post ID and approval metadata. It never records the access token.

Keep `SUN_AND_RAIN_WORKS_FACEBOOK_PUBLICATION_ENABLED=false` in durable

configuration. Scheduled agents may generate reviewable drafts; they must not

set the enable flag or fabricate the approval arguments.

Package a measurable campaign

Clio's seven-day launch plan lives at

`content/social/facebook/2026-08-22-first-week-plan.md`. Convert the complete

plan into one immutable review package with:


pnpm facebook:campaign -- `
  --plan=content/social/facebook/2026-08-22-first-week-plan.md `
  --campaign=facebook_launch_2026_08 `
  --candidate-time="10:00 America/Los_Angeles" `
  --out=artifacts/facebook/campaign-2026-08-22.json

The packager validates every dated post, source set, editorial purpose, image

format, call to action, and success signal. It adds privacy-safe Facebook

organic UTM parameters to Meta Museum links, creates a digest-bound Page draft

for each day, and binds the complete package to the exact Markdown plan hash.

Both `schedulingAllowed` and `publicationAllowed` remain `false`; this command

does not call Meta or schedule anything. Each post still requires image/rights

review, Clio's advisory copy review, and a separate human approval of its exact

draft digest.

Clio editorial review

Clio is the Meta Museum Cultural Heritage Social Editor, named for the Greek

Muse of history. `pnpm facebook:review` gives Clio a digest-bound draft and an

explicit evidence list. Its review is advisory, cannot approve publication,

and rejects invented source URLs, stealth rewrites, unsafe evidence egress, or

unmetered/truncated provider responses. Pass `--evidence-public-safe` only after

checking the bounded evidence packet contains public-safe material. Model self-

scores are not accepted; independent blinded reviewers score quality. A changed message needs

a new draft digest and human approval; an exact retention preserves the

existing digest approval.

The repeatable held-out trial command is `pnpm facebook:review:trial --

--model=claude-haiku-4-5-20251001 --receipt=<aggregate-receipt.json>

--private-dir=<ignored-private-directory>`. It writes the blinded A/B packet and

randomization key only to the ignored private directory and retains no raw copy

or reviewer identity in the aggregate receipt.

For image-led releases, `publish-photo` sends the digest-bound public image URL

to Meta's native Page photo endpoint and places the approved landing-page URL

in the caption. This avoids immutable link-preview snapshots and records both

the returned photo ID and post ID in the token-free receipt.

First-post release package

The reviewed launch copy lives at

`content/social/facebook/2026-08-21-meta-museum-introduction-photo.txt`. Its landing

page uses the dedicated 2400×1260 digital-cultural-heritage preview at

`public/images/social/meta-museum-provenance-research-og-v4.jpg`. It preserves

the Cleveland Museum of Art's CC0 image of Vincent van Gogh's *Landscape with

Wheelbarrow* (1883) as a faithful digital surrogate whose wheel aligns with the

Meta Museum gear and linked collection graph. Explicit Open Graph/Twitter alt

text and visible post copy retain the source credit. The high-resolution v4

master is designed to remain crisp after social-platform recompression. The current approval artifact is

`artifacts/facebook/draft-2026-08-21-introduction-v4.json`; because artifacts

are local evidence, operators must review the file itself and its exact digest

before approving publication.