$npx -y skills add indranilbanerjee/digital-marketing-pro --skill engagement-workflowRun a full marketing engagement using the 12-Part methodology. Use when starting a new engagement, advancing parts, applying the Decision Matrix, or showing engagement status.
| 1 | # /digital-marketing-pro:engagement-workflow — 12-Part Engagement Orchestrator |
| 2 | |
| 3 | This skill orchestrates the full marketing engagement using the 12-Part sequential methodology. Every brand engagement runs through the same 12 parts in sequence, producing a canonical set of files at each stage. |
| 4 | |
| 5 | ## Context efficiency |
| 6 | |
| 7 | Heavy skill. **Grep before Read** any referenced file, then `Read` only matched ranges with `offset` + `limit`. List the brand's workspace at `~/.claude-marketing/brands/{slug}/` (or `$CLAUDE_PLUGIN_DATA/digital-marketing-pro/brands/{slug}/` when that env var is set) before opening files. On re-invocation mid-session, skip files already in context. |
| 8 | |
| 9 | Read these references before producing output: |
| 10 | - [engagement-flow-methodology.md](../context-engine/engagement-flow-methodology.md) — the full 12-Part flow |
| 11 | - [two-views-model.md](../context-engine/two-views-model.md) — v1 / v2 architecture |
| 12 | - [stone-vs-opinion.md](../context-engine/stone-vs-opinion.md) — confidence tagging |
| 13 | - [decision-matrix-rerun.md](../context-engine/decision-matrix-rerun.md) — when to re-run what |
| 14 | - [update-back-rule.md](../context-engine/update-back-rule.md) — versioning protocol |
| 15 | - [living-instruction-file-spec.md](../context-engine/living-instruction-file-spec.md) — LIF schema |
| 16 | |
| 17 | ## Operating Mode |
| 18 | |
| 19 | This skill is invoked via the `/digital-marketing-pro:engagement` command family. The command is a thin router — **this skill is the single source of truth** for the engagement lifecycle, the checkpoint protocol, and the per-part production contract. Each subcommand maps to a specific lifecycle action. The skill calls `engagement-state.py` for persistence via: |
| 20 | |
| 21 | ``` |
| 22 | python "${CLAUDE_PLUGIN_ROOT}/scripts/engagement-state.py" <subcommand> ... |
| 23 | ``` |
| 24 | |
| 25 | You should never hand-edit `_engagement.json` — always go through `engagement-state.py`. |
| 26 | |
| 27 | ## Checkpointing & Resume (single source of truth) |
| 28 | |
| 29 | Every long engagement run is resumable. The checkpoint protocol is: **init a run → save each part as it completes → finalize → publish to the visible output folder.** This lets an interrupted run (context exhaustion, user cancel, machine sleep) resume from the next un-checkpointed part instead of restarting from Part 1. |
| 30 | |
| 31 | **1. On `start`, after the brand pre-condition passes, open a checkpoint run and link it to engagement state:** |
| 32 | |
| 33 | ```bash |
| 34 | python "${CLAUDE_PLUGIN_ROOT}/scripts/checkpoint-manager.py" init \ |
| 35 | --brand "{brand_slug}" --workflow engagement --topic "{engagement_id}" |
| 36 | |
| 37 | # Record the returned run_id into _engagement.json so resume can find it: |
| 38 | python "${CLAUDE_PLUGIN_ROOT}/scripts/engagement-state.py" set-checkpoint-run \ |
| 39 | --brand "{brand_slug}" --id "{engagement_id}" --run-id "{run_id}" |
| 40 | ``` |
| 41 | |
| 42 | `set-checkpoint-run` stores the run_id in `_engagement.json`, making the resume linkage real (previously the run_id was never persisted). |
| 43 | |
| 44 | **2. After each part completes and passes its quality gate, the orchestrator saves that part's output:** |
| 45 | |
| 46 | ```bash |
| 47 | python "${CLAUDE_PLUGIN_ROOT}/scripts/checkpoint-manager.py" save \ |
| 48 | --brand "{brand}" --run-id "{run_id}" \ |
| 49 | --step {part_number} --content-file "{path_to_that_part_deliverable}" --extension md |
| 50 | ``` |
| 51 | |
| 52 | Pass the **actual deliverable path for that part** (e.g. Part 3 saves the Four Core Documents path; Part 8 saves the Growth Plan path) — never a placeholder for a different part. |
| 53 | |
| 54 | **3. Before saving Part 5 (Client Validation) and Part 8 (Growth Plan) deliverables, run the full quality gate:** |
| 55 | |
| 56 | ```bash |
| 57 | # BLOCKING gate — Part 5 and Part 8 deliverables cannot be checkpointed until this passes |
| 58 | /digital-marketing-pro:check "{path_to_deliverable}" --full --brand {brand} |
| 59 | ``` |
| 60 | |
| 61 | If `/digital-marketing-pro:check --full` returns BLOCKED, fix the CRITICAL issues before checkpointing the part. |
| 62 | |
| 63 | **4. After the final part, publish every artifact to the user-visible folder and finalize:** |
| 64 | |
| 65 | ```bash |
| 66 | python "${CLAUDE_PLUGIN_ROOT}/scripts/output-publisher.py" publish-run \ |
| 67 | --brand "{brand}" --run-id "{run_id}" |
| 68 | |
| 69 | python "${CLAUDE_PLUGIN_ROOT}/scripts/checkpoint-manager.py" finalize \ |
| 70 | --brand "{brand}" --run-id "{run_id}" --status completed |
| 71 | ``` |
| 72 | |
| 73 | Then point the user at the visible output folder via `/digital-marketing-pro:output-folder {brand}`. |
| 74 | |
| 75 | To resume an interrupted run, use `/digital-marketing-pro:resume` — it reloads every saved part and continues from the next un-checkpointed part. |
| 76 | |
| 77 | ## State validation & rework caps |
| 78 | |
| 79 | - **V |