一键导入
synthetic-summary
Compose a one-page reviewer-facing summary of an opp's synthetic data demo — labs URL, fixture folder, narrative — for stakeholder forwarding.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Compose a one-page reviewer-facing summary of an opp's synthetic data demo — labs URL, fixture folder, narrative — for stakeholder forwarding.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Produce a domain-expert-facing before/after (pre-post) Google Doc for a DDD narrative iteration, and read the expert's edits back. Pull the verbatim CURRENT narration from canopy-web, apply reviewer feedback into a PROPOSED next version, publish a scannable side-by-side doc a non-engineer can review, then read their suggestion-mode edits via the structured Doc. Use when iterating a Connect DDD narrative on expert feedback (e.g. RF Surveys / Sophie), when asked to "make a before/after of the narration", "iterate the narrative on <expert>'s feedback", or "let <expert> sign off on the language".
Apply the two HQ-layer standing-instruction settings Nova can't set at build time — camera-only photo capture (appearance="acquire" on Deliver image uploads) and grid menu display on every module — to the deployed draft apps, then resolve the matching Phase-3 residuals. Runs between app-deploy and app-release.
Build the CommCare Learn (training) app from the PDD via Nova's /nova:autobuild. Captures nova_app_id and writes a structure summary.
Render a training deck spec.yaml into a Google Slides deck via the 14-stencil ACE template. Produces a presentable Slides URL.
Phase 3 § Step 2.8 — structural + install-time QA on the released Learn + Deliver CCZs. Downloads each CCZ via commcare_download_ccz, parses the zip + suite.xml + form XMLs, verifies form counts + Connect-marker presence match the Nova blueprint, then runs commcare-cli `validate` + `play` as install-time runtime gates. AVD-free, Connect-free — purely CCHQ-side. Halts loud on mismatch.
Run app smoke recipes against a local AVD and capture per-step screenshots for the training deck. Per-opp content only.
| name | synthetic-summary |
| description | Compose a one-page reviewer-facing summary of an opp's synthetic data demo — labs URL, fixture folder, narrative — for stakeholder forwarding. |
| disable-model-invocation | true |
Stage 1 sibling of synthetic-data-generate. Reads the Phase 7 artifacts in
the run folder and produces a single markdown page a Dimagi staffer can
forward to a stakeholder ("here is what this opportunity looks like running
well"). Pure aggregator — no MCP calls beyond Drive reads/writes, no eval.
In Stage 1 the only Phase 7 inputs are the data-generate summary and its manifest. Later stages add walkthrough slideshows, workflow URLs, and narrative-plan output; this skill grows to bundle them then.
| Source | Artifact | Used for |
|---|---|---|
| Phase 7 | 7-synthetic/synthetic-data-generate.md | labs URL, GDrive folder ID, record counts |
| Phase 7 | 7-synthetic/synthetic-data-generate_manifest.yaml OR 7-synthetic/synthetic-narrative-plan.yaml | FLW personas, cohort size, anomalies, timeline (for the narrative paragraphs) |
| Phase 7 (optional) | 7-synthetic/synthetic-narrative-plan.md | richer prose narrative — preferred over the manifest's bare data when present |
| Drive | ACE/<opp>/opp.yaml | display_name, slug, opp-level context |
Current run's run_state.yaml | phases.synthetic-data-and-workflows.products.synthetic.* — walkthroughs[], workflows, generated_at, etc. | Stage 2/3 content sections |
7-synthetic/synthetic-summary.md — one-page reviewer-facing summaryrun_state.yaml.phases.synthetic-data-and-workflows.synthetic-summary: doneRead Phase 7 artifacts.
Resolve the current run-id. Call
mcp__plugin_ace_ace-gdrive__resolve_current_run_id({slug: '<opp>'})
— returns {run_id, run_folder_id} (newest folder under
<opp>/runs/; run-ids are YYYYMMDD-HHMM so lex == chronological).
If run_id is null, halt with "no runs found — run
/ace:step synthetic-data-generate --opp <slug> first." (Replaces
the old opp.yaml.last_run_id read, which has been a dead field
since 2026-05-10 — see lib/artifact-manifest.ts.)
From ACE/<opp>/runs/<run_id>/7-synthetic/, read via
mcp__plugin_ace_ace-gdrive__drive_read_file:
synthetic-data-generate.md — labs URL, GDrive folder ID, record
counts, any warningssynthetic-narrative-plan.yaml (Stage 2)
when present; fall back to synthetic-data-generate_manifest.yaml
(Stage 1).synthetic-narrative-plan.md (Stage 2, optional) — its prose seeds
the "What you'll see" paragraphs more directly than the manifest
can. Skip if absent.If synthetic-data-generate.md is absent, halt with: "run
/ace:step synthetic-data-generate --opp <slug> --opp-int-id <int> first
— this skill aggregates its output."
Read ACE/<opp>/opp.yaml for display_name + slug. Read the
current run's run_state.yaml for
phases.synthetic-data-and-workflows.products.synthetic.*
— the walkthroughs[] list (Stage 2 — empty in Stage 1, populated
per-persona by synthetic-walkthrough-run), workflows,
generated_at. Per-run only — this skill summarizes the current
run's synthetic state, not a cross-run history.
Compose the summary at
ACE/<opp>/runs/<run_id>/7-synthetic/synthetic-summary.md. Shape:
# <opp.yaml.display_name> — Synthetic Demo
**Opp:** `<slug>` · **Fixture run:** `<run_id>` · **Generated:** <ISO from `products.synthetic.generated_at`>
**See it live:** <labs URL from synthetic-data-generate.md> ← clickable
**Fixture folder (read-only, for review):** <GDrive folder URL from synthetic-data-generate.md>
## Demonstrative workflows (Stage 3)
Render this section ONLY when `products.synthetic.workflows.{llo_weekly_review_id, program_admin_audit_id}` are populated. For each:
- **LLO Weekly Review** — when `synthetic-workflow-seed.md` recorded a saved run, deep-link the latest run so the polished dashboard renders directly (skips the run picker / "select an opportunity" gate): `${LABS_BASE_URL}/labs/workflow/<llo_weekly_review_id>/run/?run_id=<week_2_run_id, else week_1_run_id>&opportunity_id=<labs_opp_id>` (clickable). If no run was saved, fall back to `${LABS_BASE_URL}/labs/workflow/<llo_weekly_review_id>/?opportunity_id=<labs_opp_id>` (lands on the run picker).
- Saved-runs progression (when `synthetic-workflow-seed.md` records `Week 1 run_id` + `Week 2 run_id`): "Week 1 → Week 2 trend visible: <one-line description from the manifest's `coaching_arcs[]` or `anomalies[]`>".
- **Program Admin Audit** — deep-link the saved audit run when recorded: `${LABS_BASE_URL}/labs/workflow/<program_admin_audit_id>/run/?run_id=<audit_run_id>&opportunity_id=<labs_opp_id>` (clickable); else `${LABS_BASE_URL}/labs/workflow/<program_admin_audit_id>/?opportunity_id=<labs_opp_id>`.
- "Reads the LLO Weekly Review's saved runs to render week-over-week LLO process compliance."
If polish ran (`synthetic-workflow-polish.md` exists), append: "Per-opp visuals applied: <patches_applied count> patches across hero / FLW cards / anomaly callouts / domain branding."
If polish-eval's verdict scored visual-judge dimensions, append: "Visual-judge: hierarchy=<score>, brand-fit=<score>." Skip if either is null (capture failure).
When `synthetic.workflows` is empty, omit this section.
## What you'll see
<Paragraph 1 — opp context.>
One sentence summarizing the opp from the PDD's intervention summary
(or display_name if PDD not read here). Then one sentence on the
four-week cadence and total dataset size: "<N> synthetic FLWs delivered
<M> visits across <K> beneficiaries over <weeks> weeks." Numbers come
from the manifest's `flw_personas`, `beneficiary_cohorts[].size`,
`timeline.weeks`, and `record_counts.user_visits`.
<Paragraph 2 — the cast.>
Walk the reader through the FLW roster: who's a rockstar, who's
steady, who's struggling, who's new. Use the manifest's
`flw_personas[].display_name` and `archetype`. If any persona has
notes or an `improvement_arc`, mention them. The point is to show
the data was authored, not random.
<Paragraph 3 — the story.>
Describe what a stakeholder will notice in labs. If `anomalies` is
non-empty, name them ("Dinesh's weight outliers spike in week 3";
"Esi missed two follow-ups in week 2"). If `kpi_config` has KPIs,
describe what each measures and the threshold. If both are empty
(default Stage 1 manifest), be honest: "This is a baseline dataset —
no anomalies seeded yet. Add them by editing the manifest and
re-running synthetic-data-generate."
## Persona walkthroughs (Stage 2)
Render this section ONLY when `products.synthetic.walkthroughs[]` is
non-empty. For each entry:
- **<persona display name>** — `<eval_score>/5` average · captured
`<run_at>`
[Open slideshow](<webViewLink of slideshow_artifact>)
Group by persona; if a persona has multiple runs (re-captures), list
the most recent first and show older runs collapsed under "Earlier
captures."
If `walkthroughs[]` is empty, omit this entire section — don't emit
"no walkthroughs yet." A stakeholder reading a Stage 1 summary
shouldn't see promises about Stage 2 deliverables that didn't run.
## What's next
Phase 7 ships in stages — emit only the lines that match THIS opp's state:
- When `products.synthetic.workflows` is empty: "Stage 3 (demonstrative workflows) hasn't run for this opp — `/ace:step synthetic-workflow-seed` instantiates the LLO weekly review + program admin audit."
- When `synthetic.workflows` exists but `synthetic-workflow-polish.md` is absent: "Stage 3.2 (polish) hasn't run — `/ace:step synthetic-workflow-polish` applies hero panels + named FLW cards + anomaly callouts."
- When `synthetic.walkthroughs[]` is empty: "Stage 2.6 (persona walkthroughs) hasn't run — `/ace:step synthetic-walkthrough-run` produces stakeholder-ready slideshows. Requires `/ace:labs-login` first."
- Always: "To regenerate this opp's data with a different manifest, run `/ace:step synthetic-data-generate --opp <slug>`. To fully disable synthetic mode, call `mcp__connect-labs__synthetic_disable(opportunity_id=<int>)`."
Skip the entire section if all three stage gaps are filled (the demo is complete).
Write via mcp__plugin_ace_ace-gdrive__drive_create_file. If the file
already exists (re-run), overwrite via drive_update_file.
Update run_state.yaml via update_yaml_file:
phases:
synthetic-data-and-workflows:
synthetic-summary: done
mcp__plugin_ace_ace-gdrive__drive_read_filemcp__plugin_ace_ace-gdrive__drive_create_filemcp__plugin_ace_ace-gdrive__drive_update_filemcp__plugin_ace_ace-gdrive__update_yaml_fileAggregator only — same behavior in auto and review modes. No external side effects beyond writing the summary file.
--dry-run is a no-op pass-through: write the summary as normal (no
external side effects in this skill anyway). State tracks as
dry-run-success.
| Failure | Detection | Recovery |
|---|---|---|
synthetic-data-generate.md missing | step 1 halt | Run synthetic-data-generate first. |
| Manifest YAML malformed | step 2 fallback | Skip persona-walk paragraph; emit a > manifest unparseable — narrative truncated banner and continue. |
phases.synthetic-data-and-workflows.products.synthetic.generated_at missing | step 2 fallback | Use file-modified timestamp of synthetic-data-generate.md instead. |
synthetic-data-generate — produces the inputs this skill aggregates.| Date | Change | Author |
|---|---|---|
| 2026-05-06 | Initial Stage 1 MVP skill — three-paragraph reviewer summary aggregating data-generate output | ACE team (Plan B Stage 1) |
| 2026-05-06 | Stage 2: prefer synthetic-narrative-plan.{md,yaml} when present; render Persona Walkthroughs section from products.synthetic.walkthroughs[]. Section is omitted entirely when empty (Stage 1 summaries unchanged). | ACE team (Plan B Stage 2) |
| 2026-05-07 | Stage 3+: render Demonstrative Workflows section from products.synthetic.workflows.{llo_weekly_review_id, program_admin_audit_id}; surface saved-runs Week-1/Week-2 trend (Stage 3b) + polish patch count + visual-judge scores (post canopy:visual-judge wire-up). Replace the static "What's next" block with conditional gap-detection so the summary self-describes which stages haven't run for this opp. | ACE team (Plan B Stage 3+) |
| 2026-06-13 | Demonstrative-workflow links now deep-link the saved run (/labs/workflow/<id>/run/?run_id=<run_id>&opportunity_id=<opp>) so they render the polished dashboard directly instead of the run picker; fall back to the bare URL only when no run was saved. Recipe per docs/learnings/2026-06-13-labs-workflow-run-deeplink.md (jjackson/ace#769). | ACE team |