feat(skills): experiment, audience-review, ad-fatigue-check, and incident-postmortem workflow skills#391
Merged
Conversation
…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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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