Use when an AI product's quality, behavior, cost, latency, coverage, or completion signal changes across time and the PM must distinguish real drift from input mix, source, oracle, product, model, policy, instrumentation, or operational explanations before choosing an eval, intervention, hold, or rollback route.
Use this skill to turn a time-varying AI signal into a claim-bounded diagnosis.
It forces the PM to frame comparable windows, eligible exposure, denominator,
slice, version, source, and oracle before calling something a regression. The
output is a diagnosis record and the smallest next comparison; it is not a
monitor, an anomaly detector, a statistical test, or an automatic mitigation.
When to use
a quality, trust, cost, latency, coverage, completion, refusal, or policy
signal looks different from an earlier window;
a dashboard, review pattern, support report, or pilot note suggests that an
AI workflow changed after a release, source update, user-mix change, or
operational event;
a team wants to blame the newest model, prompt, retrieval index, tool, or
policy before checking whether the comparison is valid;
a PM needs to decide whether to observe, investigate, build an eval, narrow
exposure, hold, or escalate a possible rollback.
Do not use this when
the task is one concrete failed run that needs a minimal reproduction; use
pm-ai-trace-to-regression;
a single reviewed correction must become one privacy-safe eval case; use
pm-ai-feedback-to-eval;
A changed numerator is an observation. It becomes a drift hypothesis only
after the comparison names the eligible exposure, denominator, user-job
slice, baseline and candidate windows, source or oracle, version/config, and
evidence status.
Never write “accuracy dropped,” “the model regressed,” or “users are failing”
when the record only shows a count, a rate with an unknown denominator, a
non-comparable window, or a reviewer impression.
Workflow
1. Frame the signal
Write one sentence without a cause:
For [user job], [signal] changed from [baseline observation] in
[baseline window] to [candidate observation] in [candidate window].
Then capture:
Field
Required question
signal_id
Which event, score, cost, latency, completion, or policy signal is being discussed?
user_job
What was the person or system trying to complete?
unit
What is one eligible request, session, task, artifact, or accepted outcome?
baseline_window
What exact start/end timestamps and timezone define the comparison baseline?
candidate_window
What exact start/end timestamps and timezone define the changed window?
eligible_exposure
Who or what could have encountered the workflow in each window?
denominator
Which eligible units are actually counted, and which are missing?
slice
Which user, tenant, route, language, source, task, risk, or device slice matters?
version_config
Which model, alias, prompt, tool, retrieval, policy, UI, and feature flag were active?
source_or_oracle
What source, label, reviewer rule, or terminal state says what “good” means?
evidence_status
Is this Observed, Reported, Not run, Not provided, Conflict, or Need evidence?
If any field changes across the windows, record it as a possible explanation,
not as a correction to be silently ignored.
2. Check comparability before diagnosis
Use this order:
Joinability: Can the baseline and candidate be joined to the same unit,
request, session, task, or artifact identity without exposing private data?
Exposure: Did the same eligible population have a comparable chance to
enter the route? Do not use observed completions as exposure.
Denominator: Are exclusions, retries, timeouts, empty results, abstains,
and missing labels counted consistently?
Version: Can the model/provider, prompt, tools, retrieval/source version,
policy, UI, and feature flags be read for each comparison unit?
Oracle: Did the definition of acceptable output, reviewer rubric, source
truth, or terminal outcome change?
Instrumentation: Did event names, logging, sampling, privacy redaction,
ingestion delay, or aggregation logic change?
Window: Are time zones, freshness lag, seasonality, rollout ramp, and
observation maturity comparable?
If a material check fails, set comparability: Not comparable, preserve the
observation, and route to Need evidence or Investigate. Do not repair the
gap by assuming the latest version caused it.
3. Classify competing explanations
Classify each case separately. A record may carry a primary hypothesis and
secondary hypotheses, but it must not collapse them into MODEL_PROVIDER by
default.
Class
What may have changed
Minimum receipt before calling it supported
INPUT_DISTRIBUTION
language, task shape, artifact mix, difficulty, or source population
matched input slice and exposure comparison
USER_OR_TENANT_MIX
user skill, tenant, geography, plan, route, or workflow mix
eligible population and segment denominator
SOURCE_OR_FRESHNESS
retrieved corpus, file version, index, schema, or source availability
source identity, freshness, permissions, and retrieval receipt
ORACLE_OR_LABEL
reviewer rubric, reference answer, terminal state, or label policy
versioned oracle and agreement/change record
MODEL_OR_PROVIDER
model, alias, endpoint, safety behavior, quota, or provider response
exact version and paired representative eval
PROMPT_TOOL_CONFIG
prompt, tool description, routing, context, memory, or flag
behavioral diff and paired slice
PRODUCT_OR_WORKFLOW
UI, handoff, approval, fallback, downstream mapping, or user path
journey state and downstream receipt
POLICY_OR_RUBRIC
safety, moderation, policy, or quality threshold
policy/rubric version and affected slice
INSTRUMENTATION
event schema, sampling, aggregation, logging, or delay
before/after instrumentation receipt
OPERATIONAL
outage, timeout, rate limit, queue, dependency, or deploy health
incident or service receipt linked to the slice
EXPECTED_VARIANCE
normal seasonality, small sample, task novelty, or workflow choice
stable baseline distribution or domain explanation
UNKNOWN
more than one explanation remains plausible
list of missing receipts and owner
These labels are hypotheses until the receipt is reviewed. UNKNOWN is a
valid result, not a failed analysis.
4. Build a diagnosis table
Keep facts and explanations in separate columns:
ID
Observation
Hypothesis
Evidence needed
Owner
Status
D-001
Exact signal and comparable window facts
One drift class, not a verdict
Receipt that could support or reject it
Named owner
Proposed / Reviewed / Need evidence
For every hypothesis, write one disconfirming check. Examples:
If MODEL_OR_PROVIDER, compare the same representative task slice on the
old and new version with the same oracle and count cost, latency, abstain,
and required evidence.
If SOURCE_OR_FRESHNESS, compare source identity, freshness, retrieval
coverage, and permissions before comparing model outputs.
If INPUT_DISTRIBUTION, reweight or separately report the affected slice;
do not hide it in a blended rate.
If ORACLE_OR_LABEL, freeze the previous rubric and rerun a blind review;
a changed label rule is not model regression.
If INSTRUMENTATION, reconcile raw event joins, sampling, delay, and
aggregation before changing a product route.
5. Choose the smallest next comparison
Use the route only after the diagnosis table names its receipt:
Route
Use when
Minimum next proof
Observe
signal is low-risk, immature, or compatible evidence is not yet available
owner, window, watch condition, and stop time
Investigate
a join, source, instrumentation, or operational receipt is missing
one named lookup and expected receipt
Eval
a reproducible slice and oracle exist but quality is uncertain
paired case set with positive, negative, abstain, and expected-variance slices
Narrow
risk is bounded to a route, task, tenant, or version and exposure can be limited
scope, owner, user notice if needed, and verification window
Hold
the team cannot establish comparability or the change may be consequential
unchanged/manual route and explicit re-entry condition
Rollback candidate
a material regression is independently supported and an authorized owner can act
impact, rollback scope, receipt, and post-rollback verification
Need evidence
no route can be defended from the available record
missing fields, owner, and smallest evidence request
This skill may propose a rollback candidate; it does not execute a rollback,
change a prompt, switch a model, alter a policy, or contact a user.
6. Write the diagnosis record
diagnosis_id:
signal:
user_job:
observation:
baseline_window:
candidate_window:
eligible_exposure:
denominator:
slice:
version_config:
source_or_oracle:
comparability: Comparable | Not comparable | Not provided
primary_hypothesis:
secondary_hypotheses:
disconfirming_check:
evidence_status: Observed | Reported | Not run | Not provided | Conflict | Need evidence
route: Observe | Investigate | Eval | Narrow | Hold | Rollback candidate | Need evidence
owner:
stop_rule:
rollback_or_containment:
next_receipt:
not_claimed:
Separate Finding: proposed, Diagnosis: reviewed, Fix: implemented, and
Outcome: verified. A review of drift is not a release result.
Quality gates
Before handing off the record, check:
The user job and one unit of analysis are named.
Baseline and candidate windows include timezone and observation maturity.
Eligible exposure and denominator are distinct and present or explicitly
marked Not provided.
Model/provider, prompt/tool, source, oracle, policy, UI, and
instrumentation changes are listed where relevant.
At least one non-model explanation is considered.
One disconfirming check is assigned to a named owner.
The route has a stop rule, next receipt, and containment or rollback note.
No live quality, safety, causal, adoption, or production claim is made.
Output contract
Return these sections in order and preserve missingness:
Signal frame
State the user job, unit, signal, baseline/candidate windows, eligible
exposure, denominator, slice, version/config, source/oracle, and evidence
status.
Comparability check
Show each material join as Comparable, Not comparable, or Not provided.
Name the missing receipt and owner; do not silently repair a gap.
Diagnosis table
List observation, primary and secondary hypotheses, drift class, disconfirming
check, owner, status, and route. Keep UNKNOWN when explanations cannot be
separated.
Smallest next comparison
Choose one reversible Observe, Investigate, Eval, Narrow, Hold,
Rollback candidate, or Need evidence route with a receipt and stop rule.
Not covered and review ask
List unsupported quality, safety, causal, adoption, production, or rollback
claims, then ask for one sanitized evidence receipt.
Edge cases
The numerator changed but exposure changed too: keep the observation and
stop at Not comparable until eligible exposure and denominator are joined.
The model alias changed: classify it as a hypothesis and record the exact
version; do not infer regression without a paired representative slice.
The source or rubric changed: freeze or version the source/oracle before
comparing model behavior; a changed reference can create measured drift.
The event schema changed: reconcile raw events, sampling, delay, and
missing joins before interpreting a rate.
The signal improved: check whether a critical slice, abstention, user mix,
cost, latency, or policy guardrail worsened behind the aggregate.
The signal is too small or immature: route to Observe with an expiry,
not a false precision claim.
A high-impact action is implicated: stop diagnosis-to-optimization and
route to the authorized incident, security, privacy, or approval owner.
A case contains sensitive material: retain only a private authorized
pointer and publish redacted IDs, categories, versions, and evidence status.
Adjacent skills and handoff
Use one next skill after the diagnosis, not the whole catalog:
pm-ai-trace-to-regression for one concrete failed run;
pm-ai-feedback-to-eval for a reviewed correction that can become one
privacy-safe eval case;
pm-ai-outcome-to-improvement when the proposal-to-outcome chain is
reconciled and needs an improvement finding;
pm-ai-output-to-eval when the unit, oracle, and slices are ready for a
repeatable output-quality evaluation;
pm-ai-improvement-to-route when a validated gap needs a smallest lever;
pm-ai-signal-to-intervention when a live signal has enough evidence for a
bounded intervention;
pm-ai-model-change-to-migration when the trigger is a known lifecycle or
provider change;
pm-release-to-learn only after a release is independently verified.
Evidence language
Prefer Observed, Reported, Comparable, Not comparable, Hypothesis,
Reviewed, Not run, Not provided, Conflict, Need evidence, and
Rollback candidate. Avoid “proves,” “the model is worse,” “users failed,”
or “the fix worked” unless the specific claim has its own oracle and evidence.
Not covered
No live monitoring, alerting, statistical significance, causal inference,
anomaly detection, dashboard, or automated mitigation is implemented.
No model, provider, prompt, tool, retrieval, policy, UI, or feature flag is
changed by this skill.
No observation supports a quality, safety, cost, latency, completion,
adoption, causal, or production claim by itself.
No private trace, customer data, credential, secret, private URL, or source
document may be copied into a public fixture.
A diagnosis does not equal a regression, an intervention, a release,
rollback approval, or an outcome.
For the field definitions, taxonomy, source ledger, and handoff template, read
references/drift-diagnosis.md.
Final check
Before handing off, confirm:
the user job, unit, windows, exposure, denominator, slice, version, source,
oracle, and evidence status are explicit;
at least one non-model explanation and one disconfirming check are present;
Comparable is not claimed when a material join is missing;
observation, hypothesis, reviewed diagnosis, fix, and verified outcome remain
separate statuses;
the route has one owner, one next receipt, one stop rule, and a containment or
rollback boundary;
the fixture and reference include fictional fixture and ## Not covered;
no private data, credential, secret, provider call, automatic write, quality,
causal, safety, adoption, or production claim was introduced.
1---2name: pm-ai-drift-to-diagnosis3description: Use when an AI product's quality, behavior, cost, latency, coverage, or completion signal changes across time and the PM must distinguish real drift from input mix, source, oracle, product, model, policy, instrumentation, or operational explanations before choosing an eval, intervention, hold, or rollback route.4---56# PM AI Drift to Diagnosis78## Overview910Use this skill to turn a time-varying AI signal into a claim-bounded diagnosis.11It forces the PM to frame comparable windows, eligible exposure, denominator,12slice, version, source, and oracle before calling something a regression. The13output is a diagnosis record and the smallest next comparison; it is not a14monitor, an anomaly detector, a statistical test, or an automatic mitigation.1516## When to use1718- a quality, trust, cost, latency, coverage, completion, refusal, or policy19 signal looks different from an earlier window;20- a dashboard, review pattern, support report, or pilot note suggests that an21 AI workflow changed after a release, source update, user-mix change, or22 operational event;23- a team wants to blame the newest model, prompt, retrieval index, tool, or24 policy before checking whether the comparison is valid;25- a PM needs to decide whether to observe, investigate, build an eval, narrow26 exposure, hold, or escalate a possible rollback.2728## Do not use this when2930- the task is one concrete failed run that needs a minimal reproduction; use31 [`pm-ai-trace-to-regression`](../pm-ai-trace-to-regression/SKILL.md);32- a single reviewed correction must become one privacy-safe eval case; use33 [`pm-ai-feedback-to-eval`](../pm-ai-feedback-to-eval/SKILL.md);34- the work already has a reconciled outcome and needs an improvement finding;35 use [`pm-ai-outcome-to-improvement`](../pm-ai-outcome-to-improvement/SKILL.md);36- a live, validated signal already needs a bounded intervention; use37 [`pm-ai-signal-to-intervention`](../pm-ai-signal-to-intervention/SKILL.md);38- a known model or provider lifecycle event needs a migration decision; use39 [`pm-ai-model-change-to-migration`](../pm-ai-model-change-to-migration/SKILL.md).4041## Core rule4243> A changed numerator is an observation. It becomes a drift hypothesis only44> after the comparison names the eligible exposure, denominator, user-job45> slice, baseline and candidate windows, source or oracle, version/config, and46> evidence status.4748Never write “accuracy dropped,” “the model regressed,” or “users are failing”49when the record only shows a count, a rate with an unknown denominator, a50non-comparable window, or a reviewer impression.5152## Workflow5354### 1. Frame the signal5556Write one sentence without a cause:5758> For `[user job]`, `[signal]` changed from `[baseline observation]` in59> `[baseline window]` to `[candidate observation]` in `[candidate window]`.6061Then capture:6263| Field | Required question |64| --- | --- |65| `signal_id` | Which event, score, cost, latency, completion, or policy signal is being discussed? |66| `user_job` | What was the person or system trying to complete? |67| `unit` | What is one eligible request, session, task, artifact, or accepted outcome? |68| `baseline_window` | What exact start/end timestamps and timezone define the comparison baseline? |69| `candidate_window` | What exact start/end timestamps and timezone define the changed window? |70| `eligible_exposure` | Who or what could have encountered the workflow in each window? |71| `denominator` | Which eligible units are actually counted, and which are missing? |72| `slice` | Which user, tenant, route, language, source, task, risk, or device slice matters? |73| `version_config` | Which model, alias, prompt, tool, retrieval, policy, UI, and feature flag were active? |74| `source_or_oracle` | What source, label, reviewer rule, or terminal state says what “good” means? |75| `evidence_status` | Is this `Observed`, `Reported`, `Not run`, `Not provided`, `Conflict`, or `Need evidence`? |7677If any field changes across the windows, record it as a possible explanation,78not as a correction to be silently ignored.7980### 2. Check comparability before diagnosis8182Use this order:83841. **Joinability:** Can the baseline and candidate be joined to the same unit,85 request, session, task, or artifact identity without exposing private data?862. **Exposure:** Did the same eligible population have a comparable chance to87 enter the route? Do not use observed completions as exposure.883. **Denominator:** Are exclusions, retries, timeouts, empty results, abstains,89 and missing labels counted consistently?904. **Version:** Can the model/provider, prompt, tools, retrieval/source version,91 policy, UI, and feature flags be read for each comparison unit?925. **Oracle:** Did the definition of acceptable output, reviewer rubric, source93 truth, or terminal outcome change?946. **Instrumentation:** Did event names, logging, sampling, privacy redaction,95 ingestion delay, or aggregation logic change?967. **Window:** Are time zones, freshness lag, seasonality, rollout ramp, and97 observation maturity comparable?9899If a material check fails, set `comparability: Not comparable`, preserve the100observation, and route to `Need evidence` or `Investigate`. Do not repair the101gap by assuming the latest version caused it.102103### 3. Classify competing explanations104105Classify each case separately. A record may carry a primary hypothesis and106secondary hypotheses, but it must not collapse them into `MODEL_PROVIDER` by107default.108109| Class | What may have changed | Minimum receipt before calling it supported |110| --- | --- | --- |111| `INPUT_DISTRIBUTION` | language, task shape, artifact mix, difficulty, or source population | matched input slice and exposure comparison |112| `USER_OR_TENANT_MIX` | user skill, tenant, geography, plan, route, or workflow mix | eligible population and segment denominator |113| `SOURCE_OR_FRESHNESS` | retrieved corpus, file version, index, schema, or source availability | source identity, freshness, permissions, and retrieval receipt |114| `ORACLE_OR_LABEL` | reviewer rubric, reference answer, terminal state, or label policy | versioned oracle and agreement/change record |115| `MODEL_OR_PROVIDER` | model, alias, endpoint, safety behavior, quota, or provider response | exact version and paired representative eval |116| `PROMPT_TOOL_CONFIG` | prompt, tool description, routing, context, memory, or flag | behavioral diff and paired slice |117| `PRODUCT_OR_WORKFLOW` | UI, handoff, approval, fallback, downstream mapping, or user path | journey state and downstream receipt |118| `POLICY_OR_RUBRIC` | safety, moderation, policy, or quality threshold | policy/rubric version and affected slice |119| `INSTRUMENTATION` | event schema, sampling, aggregation, logging, or delay | before/after instrumentation receipt |120| `OPERATIONAL` | outage, timeout, rate limit, queue, dependency, or deploy health | incident or service receipt linked to the slice |121| `EXPECTED_VARIANCE` | normal seasonality, small sample, task novelty, or workflow choice | stable baseline distribution or domain explanation |122| `UNKNOWN` | more than one explanation remains plausible | list of missing receipts and owner |123124These labels are hypotheses until the receipt is reviewed. `UNKNOWN` is a125valid result, not a failed analysis.126127### 4. Build a diagnosis table128129Keep facts and explanations in separate columns:130131| ID | Observation | Hypothesis | Evidence needed | Owner | Status |132| --- | --- | --- | --- | --- | --- |133| `D-001` | Exact signal and comparable window facts | One drift class, not a verdict | Receipt that could support or reject it | Named owner | `Proposed` / `Reviewed` / `Need evidence` |134135For every hypothesis, write one disconfirming check. Examples:136137- If `MODEL_OR_PROVIDER`, compare the same representative task slice on the138 old and new version with the same oracle and count cost, latency, abstain,139 and required evidence.140- If `SOURCE_OR_FRESHNESS`, compare source identity, freshness, retrieval141 coverage, and permissions before comparing model outputs.142- If `INPUT_DISTRIBUTION`, reweight or separately report the affected slice;143 do not hide it in a blended rate.144- If `ORACLE_OR_LABEL`, freeze the previous rubric and rerun a blind review;145 a changed label rule is not model regression.146- If `INSTRUMENTATION`, reconcile raw event joins, sampling, delay, and147 aggregation before changing a product route.148149### 5. Choose the smallest next comparison150151Use the route only after the diagnosis table names its receipt:152153| Route | Use when | Minimum next proof |154| --- | --- | --- |155| `Observe` | signal is low-risk, immature, or compatible evidence is not yet available | owner, window, watch condition, and stop time |156| `Investigate` | a join, source, instrumentation, or operational receipt is missing | one named lookup and expected receipt |157| `Eval` | a reproducible slice and oracle exist but quality is uncertain | paired case set with positive, negative, abstain, and expected-variance slices |158| `Narrow` | risk is bounded to a route, task, tenant, or version and exposure can be limited | scope, owner, user notice if needed, and verification window |159| `Hold` | the team cannot establish comparability or the change may be consequential | unchanged/manual route and explicit re-entry condition |160| `Rollback candidate` | a material regression is independently supported and an authorized owner can act | impact, rollback scope, receipt, and post-rollback verification |161| `Need evidence` | no route can be defended from the available record | missing fields, owner, and smallest evidence request |162163This skill may propose a rollback candidate; it does not execute a rollback,164change a prompt, switch a model, alter a policy, or contact a user.165166### 6. Write the diagnosis record167168```text169diagnosis_id:170signal:171user_job:172observation:173baseline_window:174candidate_window:175eligible_exposure:176denominator:177slice:178version_config:179source_or_oracle:180comparability: Comparable | Not comparable | Not provided181primary_hypothesis:182secondary_hypotheses:183disconfirming_check:184evidence_status: Observed | Reported | Not run | Not provided | Conflict | Need evidence185route: Observe | Investigate | Eval | Narrow | Hold | Rollback candidate | Need evidence186owner:187stop_rule:188rollback_or_containment:189next_receipt:190not_claimed:191```192193Separate `Finding: proposed`, `Diagnosis: reviewed`, `Fix: implemented`, and194`Outcome: verified`. A review of drift is not a release result.195196## Quality gates197198Before handing off the record, check:199200- [ ] The user job and one unit of analysis are named.201- [ ] Baseline and candidate windows include timezone and observation maturity.202- [ ] Eligible exposure and denominator are distinct and present or explicitly203 marked `Not provided`.204- [ ] Model/provider, prompt/tool, source, oracle, policy, UI, and205 instrumentation changes are listed where relevant.206- [ ] At least one non-model explanation is considered.207- [ ] One disconfirming check is assigned to a named owner.208- [ ] The route has a stop rule, next receipt, and containment or rollback note.209- [ ] No live quality, safety, causal, adoption, or production claim is made.210211## Output contract212213Return these sections in order and preserve missingness:214215### Signal frame216217State the user job, unit, signal, baseline/candidate windows, eligible218exposure, denominator, slice, version/config, source/oracle, and evidence219status.220221### Comparability check222223Show each material join as `Comparable`, `Not comparable`, or `Not provided`.224Name the missing receipt and owner; do not silently repair a gap.225226### Diagnosis table227228List observation, primary and secondary hypotheses, drift class, disconfirming229check, owner, status, and route. Keep `UNKNOWN` when explanations cannot be230separated.231232### Smallest next comparison233234Choose one reversible `Observe`, `Investigate`, `Eval`, `Narrow`, `Hold`,235`Rollback candidate`, or `Need evidence` route with a receipt and stop rule.236237### Not covered and review ask238239List unsupported quality, safety, causal, adoption, production, or rollback240claims, then ask for one sanitized evidence receipt.241242## Edge cases243244- **The numerator changed but exposure changed too:** keep the observation and245 stop at `Not comparable` until eligible exposure and denominator are joined.246- **The model alias changed:** classify it as a hypothesis and record the exact247 version; do not infer regression without a paired representative slice.248- **The source or rubric changed:** freeze or version the source/oracle before249 comparing model behavior; a changed reference can create measured drift.250- **The event schema changed:** reconcile raw events, sampling, delay, and251 missing joins before interpreting a rate.252- **The signal improved:** check whether a critical slice, abstention, user mix,253 cost, latency, or policy guardrail worsened behind the aggregate.254- **The signal is too small or immature:** route to `Observe` with an expiry,255 not a false precision claim.256- **A high-impact action is implicated:** stop diagnosis-to-optimization and257 route to the authorized incident, security, privacy, or approval owner.258- **A case contains sensitive material:** retain only a private authorized259 pointer and publish redacted IDs, categories, versions, and evidence status.260261## Adjacent skills and handoff262263Use one next skill after the diagnosis, not the whole catalog:264265- `pm-ai-trace-to-regression` for one concrete failed run;266- `pm-ai-feedback-to-eval` for a reviewed correction that can become one267 privacy-safe eval case;268- `pm-ai-outcome-to-improvement` when the proposal-to-outcome chain is269 reconciled and needs an improvement finding;270- `pm-ai-output-to-eval` when the unit, oracle, and slices are ready for a271 repeatable output-quality evaluation;272- `pm-ai-improvement-to-route` when a validated gap needs a smallest lever;273- `pm-ai-signal-to-intervention` when a live signal has enough evidence for a274 bounded intervention;275- `pm-ai-model-change-to-migration` when the trigger is a known lifecycle or276 provider change;277- `pm-release-to-learn` only after a release is independently verified.278279## Evidence language280281Prefer `Observed`, `Reported`, `Comparable`, `Not comparable`, `Hypothesis`,282`Reviewed`, `Not run`, `Not provided`, `Conflict`, `Need evidence`, and283`Rollback candidate`. Avoid “proves,” “the model is worse,” “users failed,”284or “the fix worked” unless the specific claim has its own oracle and evidence.285286## Not covered287288- No live monitoring, alerting, statistical significance, causal inference,289 anomaly detection, dashboard, or automated mitigation is implemented.290- No model, provider, prompt, tool, retrieval, policy, UI, or feature flag is291 changed by this skill.292- No observation supports a quality, safety, cost, latency, completion,293 adoption, causal, or production claim by itself.294- No private trace, customer data, credential, secret, private URL, or source295 document may be copied into a public fixture.296- A diagnosis does not equal a regression, an intervention, a release,297 rollback approval, or an outcome.298299For the field definitions, taxonomy, source ledger, and handoff template, read300[`references/drift-diagnosis.md`](references/drift-diagnosis.md).301302## Final check303304Before handing off, confirm:305306- the user job, unit, windows, exposure, denominator, slice, version, source,307 oracle, and evidence status are explicit;308- at least one non-model explanation and one disconfirming check are present;309- `Comparable` is not claimed when a material join is missing;310- observation, hypothesis, reviewed diagnosis, fix, and verified outcome remain311 separate statuses;312- the route has one owner, one next receipt, one stop rule, and a containment or313 rollback boundary;314- the fixture and reference include `fictional fixture` and `## Not covered`;315- no private data, credential, secret, provider call, automatic write, quality,316 causal, safety, adoption, or production claim was introduced.
Run npx skillmds@latest add asdc163/pm-ai-drift-to-diagnosis in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Use when an AI product's quality, behavior, cost, latency, coverage, or completion signal changes across time and the PM must distinguish real drift from input mix, source, oracle, product, model, policy, instrumentation, or operational explanations before choosing an eval, intervention, hold, or rollback route. It is listed under AI & ML on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
asdc163 (@asdc163) published this skill. Their other Agent Skills are listed on their SkillMD profile.