Skip to content

feat(skills): experiment, audience-review, ad-fatigue-check, and incident-postmortem workflow skills#391

Merged
hyoshi merged 1 commit into
mainfrom
feat/skills-experiment-audience-fatigue-postmortem
Jul 12, 2026
Merged

feat(skills): experiment, audience-review, ad-fatigue-check, and incident-postmortem workflow skills#391
hyoshi merged 1 commit into
mainfrom
feat/skills-experiment-audience-fatigue-postmortem

Conversation

@hyoshi

@hyoshi hyoshi commented Jul 12, 2026

Copy link
Copy Markdown
Collaborator

feat(skills): experiment, audience-review, ad-fatigue-check, and incident-postmortem workflow skills

Four new bundled workflow skills, each with a packaged copy under
mureo/_data/skills/ and a byte-identical repo-root mirror under skills/:

  • experiment (A/Bテスト設計・実行・評価): turns an ad-hoc change into a
    designed experiment — a falsifiable hypothesis (variable / expected
    effect / success metric), exactly one variable, a Goal-bound metric,
    and a sample/duration floor from _mureo-learning. Setup on Meta via the
    native split-test tools (meta_ads_split_tests_create/_get/_list/_end;
    cells are pre-existing ad sets); Google Ads has NO experiment tool, so
    it offers the RSA-asset-A/B (google_ads_rsa_assets_analyze) and
    duplicated-campaign (google_ads_campaigns_create +
    google_ads_ad_performance_compare) paths with their caveats spelled out
    and explicit operator acknowledgment required. Records per-variant
    baselines in action_log (observation_due = designed end date), forbids
    peeking-based decisions before the window closes (sequential-testing
    bias), evaluates each variant with mureo_outcome_evaluate to a
    winner / no-difference / inconclusive verdict (inconclusive is valid),
    and offers to save the finding via /learn. Persists report="experiment".

  • audience-review (オーディエンス・配置レビュー): audits current targeting
    against the STRATEGY.md Persona — Google Ads demographic/audience/device
    reads (google_ads_demographic_targeting_list /
    google_ads_audience_targeting_list / google_ads_device_analyze), Meta
    audiences, ad-set targeting, and placement/audience analysis
    (meta_ads_audiences_list / meta_ads_analysis_placements /
    meta_ads_analysis_audience / meta_ads_insights_breakdown) — flags
    Persona mismatches (contradicting spend, missing segments, placement
    waste), and executes only the mutations mureo supports
    (google_ads_bid_adjustments_update, meta_ads_audiences_create_lookalike,
    meta_ads_ad_sets_update), presenting demographic/audience criterion and
    Meta placement exclusions as honest manual UI steps. action_log
    observation_due 14 days. Persists report="audience".

  • ad-fatigue-check (クリエイティブ疲弊チェック): scores active ads
    FATIGUED / WATCH / FRESH. Meta frequency is DERIVED (no frequency field
    is exposed) as impressions ÷ reach from meta_ads_insights_report; CTR
    trend from LAST_7_DAYS vs (LAST_14_DAYS − LAST_7_DAYS) subtraction; CPM
    drift; Google display/RSA CTR trend from
    google_ads_ad_performance_report and RSA asset-level fatigue via
    google_ads_rsa_assets_audit/_analyze. Rubric: frequency >= 3.5 + CTR
    decline >= 20% w/w = FATIGUED; one signal = WATCH; learning insights
    override. Noise guards: >= 1000 impressions per window; single-day dips
    never count. Routes fatigued ads to /creative-generate or
    /creative-refresh; pausing (meta_ads_ads_pause /
    google_ads_ads_update_status) is an approval gate. Persists
    report="fatigue".

  • incident-postmortem (インシデント振り返り): closes the learning loop
    after a /rescue — makes NO ad-platform writes. Scans action_log
    (mureo_state_get) for TURNAROUND_RESCUE / command="/rescue" entries,
    reconstructs the timeline, evaluates closed-window actions with
    mureo_outcome_evaluate, runs platform/site/measurement/external
    root-cause analysis (5-whys), writes a structured postmortem document
    (./postmortems/YYYY-MM-DD-.md on Code, inline on Desktop),
    distills 1-3 insights via /learn, and — with approval — proposes
    preventive STRATEGY.md ## Guardrails (mureo_strategy_set). Logs the
    postmortem to action_log. Persists no report.

Honest-limitation calls (no invented tools): Google Ads has no
campaign-experiment tool; Meta insights expose no frequency field
(derived from impressions/reach); demographic/audience criterion and Meta
placement exclusions have no mureo mutation tool (manual UI steps).

Registration/tests/docs: EXPECTED_PACKAGED_SKILLS 21->25; _BUNDLE_NAMES
+4 alphabetical; extended tests/test_new_workflow_skills.py to cover the
4 new skills (mirror byte-parity, frontmatter version from pyproject,
Before-you-start pointer, >=3 verified tool-name references, approval-gate
language, report_set keys for the three that persist, and a
no-ad-platform-writes assertion for incident-postmortem); README /
README.ja workflow tables +4 rows (20 operational skills); getting-started
operational count 16->20 and upload list +4 in both languages; CHANGELOG
Unreleased Added entry.

Claude-Session: https://claude.ai/code/session_01AbvhGbHZoK8VqP3kR9nWWp

…dent-postmortem workflow skills

Four new bundled workflow skills, each with a packaged copy under
mureo/_data/skills/ and a byte-identical repo-root mirror under skills/:

- experiment (A/Bテスト設計・実行・評価): turns an ad-hoc change into a
  designed experiment — a falsifiable hypothesis (variable / expected
  effect / success metric), exactly one variable, a Goal-bound metric,
  and a sample/duration floor from _mureo-learning. Setup on Meta via the
  native split-test tools (meta_ads_split_tests_create/_get/_list/_end;
  cells are pre-existing ad sets); Google Ads has NO experiment tool, so
  it offers the RSA-asset-A/B (google_ads_rsa_assets_analyze) and
  duplicated-campaign (google_ads_campaigns_create +
  google_ads_ad_performance_compare) paths with their caveats spelled out
  and explicit operator acknowledgment required. Records per-variant
  baselines in action_log (observation_due = designed end date), forbids
  peeking-based decisions before the window closes (sequential-testing
  bias), evaluates each variant with mureo_outcome_evaluate to a
  winner / no-difference / inconclusive verdict (inconclusive is valid),
  and offers to save the finding via /learn. Persists report="experiment".

- audience-review (オーディエンス・配置レビュー): audits current targeting
  against the STRATEGY.md Persona — Google Ads demographic/audience/device
  reads (google_ads_demographic_targeting_list /
  google_ads_audience_targeting_list / google_ads_device_analyze), Meta
  audiences, ad-set targeting, and placement/audience analysis
  (meta_ads_audiences_list / meta_ads_analysis_placements /
  meta_ads_analysis_audience / meta_ads_insights_breakdown) — flags
  Persona mismatches (contradicting spend, missing segments, placement
  waste), and executes only the mutations mureo supports
  (google_ads_bid_adjustments_update, meta_ads_audiences_create_lookalike,
  meta_ads_ad_sets_update), presenting demographic/audience criterion and
  Meta placement exclusions as honest manual UI steps. action_log
  observation_due 14 days. Persists report="audience".

- ad-fatigue-check (クリエイティブ疲弊チェック): scores active ads
  FATIGUED / WATCH / FRESH. Meta frequency is DERIVED (no frequency field
  is exposed) as impressions ÷ reach from meta_ads_insights_report; CTR
  trend from LAST_7_DAYS vs (LAST_14_DAYS − LAST_7_DAYS) subtraction; CPM
  drift; Google display/RSA CTR trend from
  google_ads_ad_performance_report and RSA asset-level fatigue via
  google_ads_rsa_assets_audit/_analyze. Rubric: frequency >= 3.5 + CTR
  decline >= 20% w/w = FATIGUED; one signal = WATCH; learning insights
  override. Noise guards: >= 1000 impressions per window; single-day dips
  never count. Routes fatigued ads to /creative-generate or
  /creative-refresh; pausing (meta_ads_ads_pause /
  google_ads_ads_update_status) is an approval gate. Persists
  report="fatigue".

- incident-postmortem (インシデント振り返り): closes the learning loop
  after a /rescue — makes NO ad-platform writes. Scans action_log
  (mureo_state_get) for TURNAROUND_RESCUE / command="/rescue" entries,
  reconstructs the timeline, evaluates closed-window actions with
  mureo_outcome_evaluate, runs platform/site/measurement/external
  root-cause analysis (5-whys), writes a structured postmortem document
  (./postmortems/YYYY-MM-DD-<slug>.md on Code, inline on Desktop),
  distills 1-3 insights via /learn, and — with approval — proposes
  preventive STRATEGY.md ## Guardrails (mureo_strategy_set). Logs the
  postmortem to action_log. Persists no report.

Honest-limitation calls (no invented tools): Google Ads has no
campaign-experiment tool; Meta insights expose no frequency field
(derived from impressions/reach); demographic/audience criterion and Meta
placement exclusions have no mureo mutation tool (manual UI steps).

Registration/tests/docs: EXPECTED_PACKAGED_SKILLS 21->25; _BUNDLE_NAMES
+4 alphabetical; extended tests/test_new_workflow_skills.py to cover the
4 new skills (mirror byte-parity, frontmatter version from pyproject,
Before-you-start pointer, >=3 verified tool-name references, approval-gate
language, report_set keys for the three that persist, and a
no-ad-platform-writes assertion for incident-postmortem); README /
README.ja workflow tables +4 rows (20 operational skills); getting-started
operational count 16->20 and upload list +4 in both languages; CHANGELOG
Unreleased Added entry.

Claude-Session: https://claude.ai/code/session_01AbvhGbHZoK8VqP3kR9nWWp
@hyoshi
hyoshi merged commit 0b8212f into main Jul 12, 2026
9 checks passed
@hyoshi
hyoshi deleted the feat/skills-experiment-audience-fatigue-postmortem branch July 12, 2026 07:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant