Skip to content

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).

  • 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.
  • entry_slug string (required)
  • artifact_ref string (required)
  • channels array
  • distributions_dir string
  • channels array
  • manifest_path string
  • arc_path string
  • prPRRef
  • diff_previewDiffPreview

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"
}
}
}

(no recipe yet — see SKILL guide)