daedalus_distribute
Operationalises SPEC-07 distribution-pipeline steps 3-5. Given a PUBLISHED Daedalus journal entry (gated:false AND artifact_shipped:true) and a shipped artifact_ref, derives the voice-routed social post-pack (Bluesky primary; X/LinkedIn opt-in via channels) from daedalus/contracts/marketing-engine.yaml, and appends one distribution event to daedalus/content/arc.yaml. target_repo MUST be devarno-cloud. Emits a PR; never auto-posts.
Upholds: MR-7 · MR-12
Side effects: Creates branch petrova/daedalus-distribute/<entry_slug> in devarno-cloud. Creates daedalus/content/distributions/<entry_slug>/{bluesky.md,x-thread.md?,linkedin.md?,manifest.yaml}. Modifies daedalus/content/arc.yaml (append event) and daedalus/content/decision-log.md (append one line). Opens a PR labelled awaiting-human-merge. Never auto-merges (MR-12).
Constraints
Section titled “Constraints”TARGET_REPO_IS_DEVARNO_CLOUD— envelope.target_repo must be ‘devarno-cloud’.ENTRY_EXISTS— daedalus/content/entries/<entry_slug>.md must resolve and parse a YAML frontmatter block.ENTRY_PUBLISHED— entry frontmatter must satisfy gated:false AND artifact_shipped:true (mirrors daedalus/content/lib/gating.mjs isPublishable). Never publish ahead of the build.DEDICATION_ABSENT— No emitted post body may contain the dedication wording, ‘Icarus’, or the [A.G.]/[years] tokens (checked against daedalus/contracts/dedication.yaml). SPEC-08.NO_PROMOTION— No emitted post body may contain product CTAs / funnel language (heuristic marker list). ~100/0 value/promotion.ENTRY_FRONTMATTER_INVALID— the entry’s first YAML frontmatter block must parse and contain slug/title/excerpt/url; emitted when parsing fails.CONTRACT_NOT_FOUND— daedalus/contracts/marketing-engine.yaml and dedication.yaml must exist and parse.ARC_NOT_FOUND— daedalus/content/arc.yaml must exist and parse.
Input shape
Section titled “Input shape”entry_slugstring(required)artifact_refstring(required)channelsarray
Output shape
Section titled “Output shape”distributions_dirstringchannelsarraymanifest_pathstringarc_pathstringpr→PRRefdiff_preview→DiffPreview
Example
Section titled “Example”Input:
{ "envelope": { "verb": "daedalus_distribute", "target_repo": "devarno-cloud", "idempotency_key": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", "dry_run": true, "actor": "human:alex@devarno.com", "triggered_by": { "kind": "human_request", "ref": "artifact:did-web-pds-green" } }, "params": { "entry_slug": "i-thought-atproto-was-a-social-network", "artifact_ref": "tangled:devarno/did-web-pds", "channels": [ "bluesky" ] }}Output (output_dry_run):
{ "envelope": { "verb": "daedalus_distribute", "status": "dry_run", "idempotency_key": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", "mr_citations": [ "MR-7", "MR-12" ] }, "result": { "distributions_dir": "daedalus/content/distributions/i-thought-atproto-was-a-social-network", "channels": [ "bluesky" ], "manifest_path": "daedalus/content/distributions/i-thought-atproto-was-a-social-network/manifest.yaml", "arc_path": "daedalus/content/arc.yaml", "diff_preview": { "files": [ { "path": "daedalus/content/distributions/i-thought-atproto-was-a-social-network/bluesky.md", "operation": "create" }, { "path": "daedalus/content/distributions/i-thought-atproto-was-a-social-network/manifest.yaml", "operation": "create" }, { "path": "daedalus/content/arc.yaml", "operation": "modify" }, { "path": "daedalus/content/decision-log.md", "operation": "modify" } ], "branch": "petrova/daedalus-distribute/i-thought-atproto-was-a-social-network", "commit_message": "act(daedalus): distribute i-thought-atproto-was-a-social-network" } }}Recipe
Section titled “Recipe”(no recipe yet — see SKILL guide)