···9393/**
9494 * Title + publish/update control. Publishing a NEW article targets a CHOSEN publication
9595 * (Decision 0010) and creates a public Bluesky post, so it requires an explicit confirmation
9696- * (brief §10). Editing updates the existing record in place, in its own publication, and does
9797- * NOT create a new post (Decision 0008).
9696+ * (brief §10) — the confirm dialog also discloses which mentioned accounts will be notified.
9797+ * Publishing is blocked when the assembled post exceeds 300 graphemes (the live counter flags
9898+ * it and the button is disabled). Editing updates the existing record in place, in its own
9999+ * publication, and does NOT create a new post (Decision 0008).
98100 */
99101export default function PublishPanel( {
100102 agent,
+6-4
src/lib/publish/records.ts
···271271const BSKY_POST_MAX_GRAPHEMES = 300;
272272273273/**
274274- * Build the companion Bluesky post (Decision 0005). Body text + link/mention facets come
275275- * from `assemblePostText` (shared with the editor's live counter). `description` populates
276276- * ONLY the embed card subtitle; the writer-typed lede goes in the body via `bodyLede`.
277277- * `associatedRefs` drive the standard.site rich card (Decision 0013).
274274+ * Build the companion Bluesky post (Decision 0005). Body text + facets come from
275275+ * `assemblePostText` (shared with the editor's live counter): the body is
276276+ * `title + lede + cc line + URL` (lede and cc line omitted when empty), and `facets` carries
277277+ * the article-URL link facet plus a `#mention` facet per cc-ed account. `description`
278278+ * populates ONLY the embed card subtitle; the writer-typed lede goes in the body via
279279+ * `bodyLede`. `associatedRefs` drive the standard.site rich card (Decision 0013).
278280 */
279281export function buildBskyPost( input: {
280282 title: string;