What is wrong-account prevention?
Before a post publishes, Cenelira checks the saved destination account against the schedule's workspace and platform, and refuses when that account is missing or invalid.
Destination refusal
Before a post publishes, Cenelira checks the saved connected account for the platform in the active workspace. If that account is missing, deleted, in another workspace or on the wrong platform, the schedule is refused with a named reason.
When you choose an account, the server can pick the one clear match for you. When more than one account matches, it refuses instead of choosing. This page describes both paths and names the proof fields that record the destination when a publish goes ahead.
Before a post publishes, Cenelira checks the saved destination account against the schedule's workspace and platform, and refuses when that account is missing or invalid.
It is enforced in the target identity flow. Choosing an account can pick the one clear match, while publishing a saved schedule needs an exact connectedAccountId and returns HTTP 409 with a named reason when the target needs repair.
It refuses at publish time only. It does not authenticate the platform user again when a post publishes, and it does not audit posts made before the account was connected.
Who this is for
The refusals matter most in workspaces where more than one account, workspace or platform could plausibly be picked, and they matter less when there is only one of each.
Mechanism
The target identity flow lives in src/lib/schedules/targetIdentity.ts. resolveConnectedAccountForPlatformSelection handles account choice and can auto-resolve one clear candidate. resolveScheduleTargetIdentity validates the persisted schedule target before execution. Repair cases use ScheduleTargetIdentityError with HTTP 409 and the shared error code target_repair_required.
At publish time the saved schedule has no connectedAccountId, so the publish is refused instead of a destination being chosen.
409 target_repair_requiredThe saved connectedAccountId points at a row that no longer exists.
409 target_repair_requiredThe saved account row exists but belongs to a different workspace from the schedule, and delivery across workspaces is refused.
409 target_repair_requiredThe saved account row exists but is bound to a different platform from the schedule.
409 target_repair_requiredNo connected account exists for this workspace and platform, because the caller did not pass one and the workspace has none.
409 target_repair_requiredTwo or more connected accounts match the workspace and platform, and the caller did not say which one, so the resolver refuses instead of choosing.
409 target_repair_requiredProof record
When a proof export is generated, the record uses the schedule and connected-account state held on the server. The destination is read from stored publishing data rather than written separately.
Two columns in the 17-field proof record carry the resolved destination:
targetAccount stores the label of the destination account as the server resolved it. It comes from the schedule's ConnectedAccount relation and never from the caption text.
platform stores the platform identifier on the schedule. The export does not run target repair again, and it records the schedule and account state on the server for every schedule in the selected range.
The signed PDF and the unsigned CSV file both carry these columns. See the proof record schema for all 17 fields and how the PDF is signed.
What this does not claim
A refusal at publish time is one check in a larger system, and this page says where that check stops.
FAQ
It refuses for six named target-repair reasons, each returned as HTTP 409 target_repair_required when an account is chosen or a post publishes: connected_account_required, connected_account_not_found, connected_account_wrong_workspace, connected_account_wrong_platform, connected_account_missing_for_platform and connected_account_ambiguous_for_platform.
The resolver returns connected_account_ambiguous_for_platform when the caller did not say which account to use, and the schedule cannot move forward until an exact account is chosen.
The resolver returns connected_account_not_found and the schedule needs target repair before review or publish.
No. External reviewers approve a version of the content on a review link, while wrong-account prevention is a check at publish time. The two checks are independent, and both run.
It is in the targetAccount and platform columns of the proof export. Both come from the schedule and connected-account state on the server, never from the caption or any other written copy.
Last reviewed 2026-04-24
A short checklist on how to set up workspaces and connected accounts so the refusals keep matching your accounts. Leave an email and we will send it when the checklist is ready.