draft v0.1.0 claude-opus-4-8 pattern · domain

DOWNLINK Social Repurposer

Turn a shipped DOWNLINK entry into a platform-native social artefact (X thread, LinkedIn post, Bluesky post, or newsletter excerpt) through a per-platform lens.

  • downlink
  • abacus
  • content
  • social
  • pattern:domain

inputs

namerequireddefault
slug yes
platform yes
abacus_path no
source_notes no
entry_title no
entry_published_at no
today no
lens_role no
lens_allowed_domains no
lens_allowed_diagrams_primary no
lens_allowed_diagrams_secondary no
lens_anti_slop no
lens_default_access no
lens_sections no
lens_source_roots no

routing

triggers

  • repurpose the downlink entry for social
  • write the x thread for this post
  • linkedin post for this entry
  • bluesky post for this entry
  • newsletter excerpt for this entry
  • cross-platform variants for a downlink post

not for

  • authoring the entry itself (use downlink-entry-author)
  • projecting an entry onto landing (use downlink-publish)
  • posting or scheduling to any platform (this prompt writes artefacts, it does not publish them)
  • inventing an entry that has not shipped yet

prompt

notes

Failure modes:
- slug does not exist in 40-shipped/blog: guard.sh aborts. Repurposing an
  unshipped entry is how you end up promising something that is not live.
- platform has no lens: guard.sh aborts and lists the available lenses.
- Entry is published:false: guard.sh warns. The variants would point at a
  page that does not render.
- Unresolved {{lens_*}} placeholder survives rendering: guard.sh aborts.
  Same defensive check the crumb extractor runs.

Voice rules that apply to every lens, because they are the surface's and
not the platform's:
- no em dashes in anything a reader sees. Author preference, no test
  behind it.
- the entry's own voice is lowercase and plain. A variant that suddenly
  sounds like a LinkedIn growth account is wrong even when the platform is
  LinkedIn.
- never claim an entry is featured. The featured slot is a hardcoded
  constant in landing and this prompt cannot change it.

On why this prompt exists: the artefact that seeded it arrived with a
cross_platform frontmatter block carrying an X thread, a LinkedIn post, a
Bluesky post and a newsletter excerpt. None of those fields are in the
abacus schema, and landing's transform.ts builds a whitelist, so they were
silently dropped at projection and the copy was lost. Social variants are
their own artefacts in the vault. That is what this emits.

description

Reads a shipped DOWNLINK entry from the abacus vault and emits one social
artefact for a named platform, written natively for that platform rather
than the same paragraph re-cut four ways. Platform selection is a lens,
following the same mechanism the crumb extractor uses for audiences: each
lens carries the voice, the length discipline, the permitted angles, and
the anti-slop rules for its surface. Output is an abacus social-post or
social-thread artefact with a linked_journal pointer back to the entry, so
the variants live in the vault as first-class content instead of as inert
frontmatter on the blog post. Use when an entry has shipped and needs its
cross-platform variants.